IT

[java8] stream을 이용하여 list 합치는 방법

채보 2021. 2. 20. 23:43

잊지 않기 위해 Java에서 리스트를 합치는 방법 중 stream을 이용하여 list를 합치는 방법을 작성합니다.

 

보통 list를 합치실 때는 addAll() 을 이용해서 list를 합칩니다. 

 

아래는 간단한 예제로 a2에 있는 값을 a1에 합치는 케이스 입니다. 

List<String> a1 = new ArrayList<>()
a1.add("A")
a1.add("B")
a1.add("C")
a1.add("D")

List<String> a2 = new ArrayList<>()
a1.add("a")
a1.add("b")
a1.add("c")
a1.add("d")

a1.addAll(a2);

// 실행 결과
[A, B, C, D, a, b, c, d]

 

Java8에서는 stream을 이용해서 list를 합칠 수 있습니다. 

List<String> a1 = new ArrayList<>()
a1.add("A")
a1.add("B")
a1.add("C")
a1.add("D")

List<String> a2 = new ArrayList<>()
a1.add("a")
a1.add("b")
a1.add("c")
a1.add("d")

// stream 사용
List<String> result = Stream.concat(a1.stream(), a2.stream()).collect(Collectors.toList());

 

만약에 list 안에 list 또는 배열이 존재할 경우에는 어떻게 해결할 수 있을까요?

flatMap을 사용하면 됩니다. 

public class TempVO {
	
    private List<String> name;
}

List<TempVO> main = new ArrayList<>()


// flatMap 사용
List<String> result = main.stream().flatMap(list -> list.stream()).collect(Collectors.toList());

 

리스트를 합치면서 중복 방지를 하고 싶으신 경우에는

steam의 distinct()를 이용하면 쉽게 중복 값을 제거할 수 있습니다.