Java - List の一覧を結合する

Java で 2 つの一覧を結合する方法について説明。List.addAll() で結合、Stream を使用して結合、重複要素の除外。

概要

Java で 2 つの一覧を結合する場合がある。ここでは 2 つの一覧を結合する方法について見ていく。

List.addAll() を使用して一覧を結合する方法

List.addAll() を使用して結合する方法は次のとおりである。

package com.devkuma.basic.list;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class ListAddAll {
    public static void main(String[] args) {
        List<String> list1 = Arrays.asList("devkuma", "araikuma", "kimkc", "jiwoo");
        List<String> list2 = Arrays.asList("yun", "kim", "kuma");

        // List.addAll を使用して一覧を結合する。
        List<String> newList = new ArrayList<String>();
        newList.addAll(list1);
        newList.addAll(list2);

        System.out.println(newList);
    }
}

Output:

[devkuma, araikuma, kimkc, jiwoo, yun, kim, kuma]

Stream.concat() を使用して一覧を結合する方法

Stream.concat() を使用して結合する方法は次のとおりである。

package com.devkuma.basic.list;

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class StreamConcatLists {
    public static void main(String[] args) {
        List<String> list1 = Arrays.asList("devkuma", "araikuma", "kimkc", "jiwoo");
        List<String> list2 = Arrays.asList("yun", "kim", "kuma");

        // Stream を使用して一覧を結合する。
        List<String> newList = Stream.concat(list1.stream(), list2.stream())
                                      .collect(Collectors.toList());

        System.out.println(newList);
    }
}

Output:

[devkuma, araikuma, kimkc, jiwoo, yun, kim, kuma]

Stream.flatMap() を使用して一覧を結合する方法

Stream.flatMap() を使用して結合する方法は次のとおりである。

package com.devkuma.basic.list;

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class StreamFlatMap {
    public static void main(String[] args) {
        List<String> list1 = Arrays.asList("devkuma", "araikuma", "kimkc", "jiwoo");
        List<String> list2 = Arrays.asList("yun", "kim", "kuma");

        // Stream.flatMap を使用して一覧を結合する。
        List<List<String>> outer = Arrays.asList(list1, list2);
        List<String> newList = outer.stream()
                                    .flatMap(lst -> lst.stream())
                                    .collect(Collectors.toList());

        System.out.println(newList);
    }
}

Output:

[devkuma, araikuma, kimkc, jiwoo, yun, kim, kuma]

Stream を使用して一覧の重複要素を除外して結合する方法

Java で 2 つの一覧を結合するときに、内部の重複要素を除外して結合したい場合について説明する。
このような場合は、Stream.concat().distinct() を一緒に使用することで実現できる。

import java.util.List;
import java.util.Arrays;
import java.util.Comparator;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class ListJoinExcludeDuplicateElements {
    public static void main(String[] args) {
        // 文字列リスト
        List<String> strList1 = Arrays.asList("devkuma", "araikuma", "kimkc", "jiwoo");
        List<String> strList2 = Arrays.asList("devkuma", "araikuma", "kimkc");

        // Stream を使用して Java の一覧を結合する。
        List<String> newStrList = Stream.concat(strList1.stream(), strList2.stream())
                                        .distinct() // 重複除外
                                        .collect(Collectors.toList());
        System.out.println(newStrList);

        // 数値リスト
        List<Integer> intList1 = Arrays.asList(5, 4, 3, 2, 1);
        List<Integer> intList2 = Arrays.asList(1, 2, 3, 4);

        // Stream を使用して Java の一覧を結合する。
        List<Integer> newIntList = Stream.concat(intList1.stream(), intList2.stream())
                                         .distinct() // 重複除外
                                         .sorted(Comparator.naturalOrder()) // 昇順ソート
                                         .collect(Collectors.toList());

        System.out.println(newIntList);
    }
}

Output:

[devkuma, araikuma, kimkc, jiwoo]
[1, 2, 3, 4, 5]