Java - 리스트를 두개의 리스트로 나누기

리스트 1개를 2개의 리스트로 분할하는 방법을 소개합니다.

1. for문으로 2개의 리스트로 분할

for문으로 원하는 크기로 리스트를 2개의 리스트로 나눌 수 있습니다.

아래 예제에서는 반으로 나누었습니다.

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

public class Example {

    public static void main(String[] args) {

        List<String> myList = new ArrayList<>(
                Arrays.asList("A", "B", "C", "D", "E", "F", "G"));

        List<String> first = new ArrayList();
        List<String> second = new ArrayList();

        int size = myList.size();
        for (int i = 0; i < size; i++) {
            if (i < (size + 1)/2) {
                first.add(myList.get(i));
            } else {
                second.add(myList.get(i));
            }
        }

        System.out.println(first);
        System.out.println(second);
    }
}

Output:

[A, B, C, D]
[E, F, G]

2. subList()로 2개의 리스트로 분할

subList(fromIndex, toIndex)는 fromIndex에서 toIndex까지의 요소를 포함하는 새로운 리스트를 만들어 리턴합니다. toIndex는 리스트에 포함되지 않으며, 직전 인덱스인 toIndex - 1 까지만 포함됩니다.

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

public class Example1 {

    public static void main(String[] args) {

        List<String> myList = new ArrayList<>(
                Arrays.asList("A", "B", "C", "D", "E", "F", "G"));

        int size = myList.size();
        List<String> first = myList.subList(0, (size + 1) / 2);
        List<String> second = myList.subList((size + 1) / 2, size);

        System.out.println(first);
        System.out.println(second);
    }
}

Output:

[A, B, C, D]
[E, F, G]

3. Stream과 subList()로 2개의 리스트로 분할

위의 subList()예제와 동일한데, Stream을 사용하여 아래와 같이 구현할 수도 있습니다.

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

public class Example2 {

    public static void main(String[] args) {

        List<String> myList = new ArrayList<>(
                Arrays.asList("A", "B", "C", "D", "E", "F", "G"));

        int[] endpoints = {0, (myList.size() + 1)/2, myList.size()};
        List<List<String>> lists =
                IntStream.rangeClosed(0, 1)
                        .mapToObj(i -> myList.subList(endpoints[i], endpoints[i + 1]))
                        .collect(Collectors.toList());

        List<String> first = lists.get(0);
        List<String> second = lists.get(1);
        System.out.println(first);
        System.out.println(second);
    }
}

Output:

[A, B, C, D]
[E, F, G]
Loading script...
codechachaCopyright ©2019 codechacha