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.stream.Collectors;
import java.util.stream.Stream;

public class ListJoinExcludeDuplicateElememts {
    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]



최종 수정 : 2022-12-07