web-dev-qa-db-fra.com

Fusionner 3 artistes en un

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?

26
snake plissken

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);

Mettre à jour

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);
49
Asaph

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);
8
Edwin Dalorzo

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);

list1, list2, list3 sont de type List<String>

2
Dhruvan Ganesh

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;
}
0
martinseal1987