Je veux fusionner 3 arraylist en un en Java. Est-ce que quelqu'un sait quelle est la meilleure façon de faire une telle chose?
Utilisez ArrayList.addAll()
. Quelque chose comme ceci devrait fonctionner (en supposant que les listes contiennent des objets String
; vous devriez les modifier en conséquence).
List<String> combined = new ArrayList<String>();
combined.addAll(firstArrayList);
combined.addAll(secondArrayList);
combined.addAll(thirdArrayList);
Je peux voir à travers vos commentaires que vous essayez peut-être de créer une liste 2D. Si tel est le cas, un code tel que celui-ci devrait fonctionner:
List<List<String>> combined2d = new ArrayList<List<String>>();
combined2d.add(firstArrayList);
combined2d.add(secondArrayList);
combined2d.add(thirdArrayList);
Qu'en est-il de l'utilisation de Java.util.Arrays.asList pour simplifier la fusion?
List<String> one = Arrays.asList("one","two","three");
List<String> two = Arrays.asList("four","five","six");
List<String> three = Arrays.asList("seven","eight","nine");
List<List<String>> merged = Arrays.asList(one, two, three);
Utilisation de Java 8 Streams:
Liste de liste
List<List<String>> listOfList = Stream.of(list1, list2, list3).collect(Collectors.toList());
Liste de cordes
List<String> list = Stream.of(list1, list2, list3).flatMap(Collection::stream).collect(Collectors.toList());
Utilisation de la méthode de fabrique statique Java 9 List.of (Attention: cette liste est immuable et interdit null)
List<List<String>> = List.of(list1, list2, list3);
Où list1, list2, list3
sont de type List<String>
ok presque un an je sais mais j'ai eu ce problème récemment, j'ai un objet (JobList) qui contient une liste d'objets (jobs) cette liste peut être n'importe quelle taille ma solution prend X quantité de JobLists et retourne un JobList, donc donné 3 objets JobList, il en renverrait un où sa liste d'objets Job serait triée comme suit
job1FromJobList1 job1FromJobList2 job1FromJobList3 job2FromJobList1 job2FromJobList2 job2FromJobList3 job3FromJobList1 job3FromJobList2.
c'est ce que je veux dire si je disais fusionner, vous pouvez ignorer la partie de moi qui crée l'objet, la partie principale obtient le maximum, puis les ajouter à la liste si je <jobList.getJobList (). size ()
public JobList merge(List<JobList> jobListList) {
JobList mergedJobList = new JobList();
int max = 0;
ArrayList<Job> mergedList = new ArrayList<>();
ArrayList<String> tags = new ArrayList<>();
for (JobList jobList : jobListList){
max = Math.max(max,ListConverter.jobListFromString(jobList.getJobList()).size());
for (String tag : jobList.getJobListsTags()){
tags.add(tag);
}
}
for (int i = 0; i < max; i++){
for (JobList jobList : jobListList){
if (i < ListConverter.jobListFromString(jobList.getJobList()).size())
mergedList.add(ListConverter.jobListFromString(jobList.getJobList()).get(i));
}
}
mergedJobList.setJobListTitle("Title");
mergedJobList.setJobListFavourite(false);
mergedJobList.setJobListsTags((String[]) tags.toArray());
mergedJobList.setJobListColour(this.getString(R.string.white));
mergedJobList.setJobList(ListConverter.stringFromJobList(mergedList));
return mergedJobList;
}