web-dev-qa-db-ja.com

3つの配列リストを1つにマージする

Javaで3つの配列リストを1つにマージします。誰がそのようなことをするための最良の方法であるかを知っていますか?

27
snake plissken

ArrayList.addAll() を使用します。このようなものは機能するはずです(リストにStringオブジェクトが含まれていると想定します。それに応じて変更する必要があります)。

List<String> combined = new ArrayList<String>();
combined.addAll(firstArrayList);
combined.addAll(secondArrayList);
combined.addAll(thirdArrayList);

更新

あなたのコメントから、実際に2Dリストを作成しようとしていることがわかります。その場合、次のようなコードが機能するはずです。

List<List<String>> combined2d = new ArrayList<List<String>>();
combined2d.add(firstArrayList);
combined2d.add(secondArrayList);
combined2d.add(thirdArrayList);
49
Asaph

Java.util.Arrays.asListを使用してマージを簡素化するのはどうですか?

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

Java 8 Streams:

リストのリスト

List<List<String>> listOfList = Stream.of(list1, list2, list3).collect(Collectors.toList());

文字列のリスト

List<String> list = Stream.of(list1, list2, list3).flatMap(Collection::stream).collect(Collectors.toList());

Java 9 List.of static factory methodを使用(警告:このリストは不変であり、nullは許可されません)

List<List<String>> = List.of​(list1, list2, list3);

どこ list1, list2, list3List<String>

2
Dhruvan Ganesh

わかりましたが、ほぼ1年前ですが、最近この問題が発生しました。オブジェクト(ジョブ)のリストを保持するオブジェクト(JobList)があります。このリストは任意のサイズにできます。 3 JobListオブジェクトは、Jobオブジェクトのリストが次のようにソートされるものを返します。

job1FromJobList1 job1FromJobList2 job1FromJobList3 job2FromJobList1 job2FromJobList2 job2FromJobList3 job3FromJobList1 job3FromJobList2 job3FromJobList3

マージと言った場合、メイン部分が最大値を取得し、i <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