어제 오늘 내일

[Java] List 2개 합치기 본문

IT/Java

[Java] List 2개 합치기

hi.anna 2021. 5. 5. 20:54

 

Java에서 2개의 List를 합쳐서 하나로 만드는 방법입니다.

  1. List.addAll()
  2. Collections.addAll()
  3. Stream.of() + flatMap() + collect()

 

 

 

1. List.addAll()

boolean addAll​(Collection<? extends E> c)

java.util.List 인터페이스의 addAll() 메소드는 Collection 객체를 파라미터로 입력받아서,

List의 뒤에 이어붙여 줍니다.

  코드  

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

public class MergeList {
    public static void main(String[] args) {
        
        List<String> list1 = new ArrayList<>(Arrays.asList("A", "B"));
        List<String> list2 = new ArrayList<>(Arrays.asList("C", "D"));

        List<String> mergedList = new ArrayList<>();

        // list 합치기
        mergedList.addAll(list1);
        mergedList.addAll(list2);

        // 결과 출력
        System.out.println(mergedList); // [A, B, C, D]
    }
}

  결과  

[A, B, C, D]

allAll() 메소드를 이용하여,

list 객체를 mergedList에 차례로 이어붙였습니다.

 

 

 

2. Collections.addAll()

public static <T> boolean addAll​(Collection<? super T> c, T... elements)

Collections 클래스의 static 메소드인 addAll() 메소드는

Collection 객체와 n개의 element를 파라미터로 입력받습니다.

(n개의 element는 배열로 전달될 수도 있습니다.)

 

이 메소드는,

첫번째 파라미터로 입력받은 Collection 객체에, 

나머지 n개의 element를 추가해줍니다.

 

List.addAll() 메소드를 사용하는 것보다,

이 메소드를 사용하는 것의 성능이 더 좋다고 합니다.

 

  코드  

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

public class MergeList {
    public static void main(String[] args) {
        
        List<String> list1 = new ArrayList<>(Arrays.asList("A", "B"));
        List<String> list2 = new ArrayList<>(Arrays.asList("C", "D"));

        List<String> mergedList = new ArrayList<>();

        // list 합치기
        Collections.addAll(mergedList, list1.toArray(new String[0]));
        Collections.addAll(mergedList, list2.toArray(new String[0]));

        // 결과 출력
        System.out.println(mergedList); // [A, B, C, D]
    }
}

  결과  

[A, B, C, D]

Collections.addAll(mergedList, list1.toArray(new String[0]));

첫번째 파라미터로 mergedList를 전달하였고,

이 mergedList에 나머지 파라미터로 전달된 값들이 추가됩니다.

두번째 파라미터는 list1을 배열로 변경한 배열이 전달되어,

list1의 element들이 mergedList에 추가됩니다.

( List를 배열로 변경하는 방법은 아래의 포스팅을 참조하세요. )

[Java] 배열을 List로, List를 배열로 변환하기

 

[Java] 배열을 List로, List를 배열로 변환하기

배열을 List로 Arrays.asList() new ArrayList<>(Arrays.asList()) Collectors.toList() ArrayList를 배열로 toArray() - java.util.List 배열을 List로 1. Arrays.asList() 코드  import java.util.Arrays; impo..

hianna.tistory.com

 

 

 

3. Stream.of() + flatMap() + collect()

Java 8 이후부터는 Stream을 이용할 수 있습니다.

  코드  

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

public class MergeList {
    public static void main(String[] args) {

        List<String> list1 = new ArrayList<>(Arrays.asList("A", "B"));
        List<String> list2 = new ArrayList<>(Arrays.asList("C", "D"));

        // list 합치기
        List<String> mergedList = Stream.of(list1, list2)
                                        .flatMap(x -> x.stream())
                                        .collect(Collectors.toList());

        // 결과 출력
        System.out.println(mergedList); // [A, B, C, D]
    }
}

  결과  

[A, B, C, D]

Stream.of()

list1, list2의 stream을 얻어옵니다.

 

flatMap(x->x.stream())

list의 element들을 하나씩 꺼내서 

list의 element들로 이루어진 stream을 리턴합니다.

 

collect(Collectors.toList())

Stream을 List로 변환합니다.

 


 

여러기의 List를 하나로 합치는 방법을 알아보았습니다.

 

 

 

반응형
Comments