Java에서 목록을 청크로 분할

Sheeraz Gul 2023년10월12일
  1. List.subList() 메서드를 사용하여 Java에서 목록을 청크로 분할
  2. Java에서 Collectors.groupingBy() 메서드를 사용하여 목록을 청크로 분할
  3. Apache Commons Collections 방법을 사용하여 Java에서 목록을 청크로 분할
  4. Google Guava 라이브러리를 사용하여 Java에서 목록을 청크로 분할
Java에서 목록을 청크로 분할

Java에서 목록을 특정 크기의 청크로 분할해야 하는 경우가 있습니다. Java에서 이를 달성하기 위한 다양한 기능이 있습니다.

이 튜토리얼은 Java에서 목록을 청크로 분할하는 다양한 방법을 보여줍니다.

List.subList() 메서드를 사용하여 Java에서 목록을 청크로 분할

List.subList 메서드는 for 루프와 함께 사용되어 목록을 Java에서 특정 크기의 청크로 분할할 수 있습니다. subList() 메서드는 특정 시작 및 끝 인덱스 내의 주어진 목록에서 하위 목록을 가져옵니다.

예를 보자:

package delftstack;

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

public class Example {
  public static void main(String[] args) {
    List<Integer> DemoList = IntStream.rangeClosed(100, 120).boxed().collect(Collectors.toList());
    int ChunckSize = 3;

    List<List<Integer>> Chunks = new ArrayList<>();

    for (int x = 0; x < DemoList.size(); x += ChunckSize) {
      Chunks.add(DemoList.subList(x, Math.min(x + ChunckSize, DemoList.size())));
    }

    System.out.println(Chunks);
  }
}

위의 코드는 주어진 목록에서 크기 3의 청크를 생성합니다. 출력을 참조하십시오.

목록 청크 출력

마찬가지로 Java 9 IntStream.iterate()를 사용하여 목록을 Java 청크로 분할할 수 있습니다. 예를 참조하십시오.

package delftstack;

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

public class Example {
  private static <T> List<List<T>> Chunks(List<T> DemoList, int ChunkSize) {
    return IntStream.iterate(0, x -> x < DemoList.size(), x -> x + ChunkSize)
        .mapToObj(x -> DemoList.subList(x, Math.min(x + ChunkSize, DemoList.size())))
        .collect(Collectors.toList());
  }

  public static void main(String[] args) {
    List<Integer> DemoList = IntStream.rangeClosed(100, 120).boxed().collect(Collectors.toList());
    int ChunkSize = 3;

    List<List<Integer>> Chunks = Chunks(DemoList, ChunkSize);
    System.out.println(Chunks);
  }
}

위의 코드는 Java 9의 IntStream.iterate()를 사용하여 첫 번째 예제와 동일한 작업을 수행합니다. 출력을 참조하십시오.

목록 청크 출력

Java 8 Stream API를 사용하여 동일한 작업을 수행할 수도 있습니다. 예를 참조하십시오:

package delftstack;

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

public class Example {
  private static <T> List<List<T>> Chunk(List<T> DemoList, int ChunkSize) {
    return IntStream.rangeClosed(0, (DemoList.size() - 1) / ChunkSize)
        .mapToObj(
            x -> DemoList.subList(x * ChunkSize, Math.min((x + 1) * ChunkSize, DemoList.size())))
        .collect(Collectors.toList());
  }

  public static void main(String[] args) {
    List<Integer> DemoList = IntStream.rangeClosed(100, 120).boxed().collect(Collectors.toList());
    int ChunkSize = 3;

    List<List<Integer>> Chunks = Chunk(DemoList, ChunkSize);
    System.out.println(Chunks);
  }
}

위의 코드는 Java 8 Stream API를 사용하여 목록을 세 개의 청크로 분할합니다. 출력을 참조하십시오.

목록 청크 출력

Java에서 Collectors.groupingBy() 메서드를 사용하여 목록을 청크로 분할

Java Stream API의 Collectors.groupingBy() 메서드를 사용하여 목록을 청크로 분할할 수도 있습니다. 여기에서 목록 요소별로 그룹화하여 청크를 생성합니다. 이 메서드는 청크를 맵 형태로 반환합니다.

예를 보자:

package delftstack;

import java.util.Collection;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.IntStream;

public class Example {
  private static <T> Collection<List<T>> Chunk(List<T> DemoList, int GroupBy) {
    return IntStream.range(0, DemoList.size())
        .boxed()
        .collect(Collectors.groupingBy(
            x -> x / GroupBy, Collectors.mapping(DemoList::get, Collectors.toList())))
        .values();
  }

  public static void main(String[] args) {
    List<Integer> DemoList = IntStream.rangeClosed(100, 120).boxed().collect(Collectors.toList());
    int ChunkSize = 3;

    Collection<List<Integer>> Chunks = Chunk(DemoList, ChunkSize);
    System.out.println(Chunks);
  }
}

위의 코드는 그룹화 기능을 사용하여 Java에서 주어진 목록의 청크를 생성합니다. 출력을 참조하십시오.

목록 청크 출력

마찬가지로 가변 카운터를 사용하여 위의 코드를 단순화할 수 있습니다. 예를 참조하십시오.

package delftstack;

import java.util.Collection;
import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors;
import java.util.stream.IntStream;

public class Example {
  private static <T> Collection<List<T>> Chunk(List<T> DemoList, int Groupby) {
    AtomicInteger counter = new AtomicInteger();
    return DemoList.stream()
        .collect(Collectors.groupingBy(it -> counter.getAndIncrement() / Groupby))
        .values();
  }

  public static void main(String[] args) {
    List<Integer> DemoList = IntStream.rangeClosed(100, 120).boxed().collect(Collectors.toList());
    int ChunkSize = 3;

    Collection<List<Integer>> Chunks = Chunk(DemoList, ChunkSize);
    System.out.println(Chunks);
  }
}

위의 코드는 가변 카운터 AtomicInteger를 사용하여 목록별로 그룹화하여 크기 3의 청크를 생성합니다. 출력을 참조하십시오.

목록 청크 출력

Apache Commons Collections 방법을 사용하여 Java에서 목록을 청크로 분할

Apache Commons는 목록을 포함하여 많은 작업을 제공하는 타사 라이브러리입니다. Apache Commons의 컬렉션을 사용하여 Java에서 목록 청크를 생성할 수도 있습니다.

먼저 Apache Commons가 빌드 경로에 추가되었는지 확인하십시오. Apache Commons Collections를 사용하여 목록 청크를 생성하는 예를 살펴보겠습니다.

package delftstack;

import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
import org.apache.commons.collections4.ListUtils;

public class Example {
  public static void main(String[] args) {
    List<Integer> DemoList = IntStream.rangeClosed(100, 120).boxed().collect(Collectors.toList());
    int ChunkSize = 3;

    List<List<Integer>> Chunks = ListUtils.Chunk(DemoList, ChunkSize);
    System.out.println(Chunks);
  }
}

Apache Commons는 주어진 목록의 청크를 생성하는 데 사용되는 partition이라는 메서드를 제공합니다. 출력을 참조하십시오.

목록 청크 출력

Google Guava 라이브러리를 사용하여 Java에서 목록을 청크로 분할

Google의 Guava 패키지는 Java 목록과 관련된 많은 기능도 제공합니다. Java에서 목록 청크를 만드는 데 사용되는 Lists.partition() 메서드를 제공합니다.

Guava 패키지는 JDK에 포함되지 않은 타사 패키지이므로 빌드 경로에 추가되었는지 확인하십시오. 예를 들어 보겠습니다.

package delftstack;

import com.google.common.collect.Lists;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.IntStream;

public class Example {
  public static void main(String[] args) {
    List<Integer> DemoList = IntStream.rangeClosed(100, 120).boxed().collect(Collectors.toList());
    int ChunkSize = 3;

    List<List<Integer>> Chunk = Lists.partition(DemoList, ChunkSize);
    System.out.println(Chunk);
  }
}

위의 코드는 유사하게 Guava 라이브러리 partition() 메서드를 사용하여 3개의 형태로 주어진 목록의 청크를 생성합니다. 출력을 참조하십시오.

목록 청크 출력

작가: Sheeraz Gul
Sheeraz Gul avatar Sheeraz Gul avatar

Sheeraz is a Doctorate fellow in Computer Science at Northwestern Polytechnical University, Xian, China. He has 7 years of Software Development experience in AI, Web, Database, and Desktop technologies. He writes tutorials in Java, PHP, Python, GoLang, R, etc., to help beginners learn the field of Computer Science.

LinkedIn Facebook

관련 문장 - Java List