1. 소개

이 사용방법(예제)에서는 두 개의 컬렉션을 하나의 논리적 컬렉션으로 압축하는 방법을 설명합니다.

" zip" 작업은 표준 "concat" 또는 "merge" 와 약간 다릅니다 . "연결" 또는 "병합" 작업은 단순히 기존 컬렉션의 끝에 새 컬렉션을 추가하는 반면, " zip" 작업은 각 컬렉션에서 요소를 가져와 결합합니다.

핵심 라이브러리는 암시적으로 " zip"을 지원하지 않지만 이 유용한 작업을 제공하는 타사 라이브러리가 분명히 있습니다.

두 개의 List을 고려하십시오. 하나는 사람의 이름을 갖고 다른 하나는 나이를 포함합니다.

List<String> names = new ArrayList<>(Arrays.asList("John", "Jane", "Jack", "Dennis"));

List<Integer> ages = new ArrayList<>(Arrays.asList(24, 25, 27));

압축한 후에는 두 컬렉션의 해당 요소로 구성된 이름-연령 쌍이 생성됩니다.

2. 자바 8 IntStream 사용하기

핵심 Java 를 사용 하여 IntStream 을 사용 하여 인덱스를 생성 한 다음 두 컬렉션에서 해당 요소를 추출하는 데 사용할 수 있습니다.

IntStream
  .range(0, Math.min(names.size(), ages.size()))
  .mapToObj(i -> names.get(i) + ":" + ages.get(i))
  // ...

3. 구아바 스트림 사용

버전 21부터 Google Guava는 Streams 클래스 에서 zip 도우미 메서드를 제공합니다 . 이렇게 하면 인덱스 생성 및 매핑의 모든 번거로움이 제거되고 구문이 입력 및 작업으로 축소됩니다.

Streams
  .zip(names.stream(), ages.stream(), (name, age) -> name + ":" + age)
  // ...

4. jOOλ (jOOL) 사용하기

jOOL 은 또한 Java 8 Lambda에 대한 몇 가지 매력적인 추가 기능을 제공 하며 Tuple1에서 Tuple16 까지 의 지원으로 zip 작업이 훨씬 더 흥미로워집니다.

Seq
  .of("John","Jane", "Dennis")
  .zip(Seq.of(24,25,27));

이것은 압축된 요소의 튜플포함 하는 Seq 의 결과를 생성합니다 .

(tuple(1, "a"), tuple(2, "b"), tuple(3, "c"))

jOOL의 ​​zip 방법은 사용자 정의 변환 기능을 제공할 수 있는 유연성을 제공합니다.

Seq
  .of(1, 2, 3)
  .zip(Seq.of("a", "b", "c"), (x, y) -> x + ":" + y);

또는 인덱스만 사용하여 압축하려는 경우 jOOL에서 제공 하는 zipWithIndex 메서드 를 사용할 수 있습니다 .

Seq.of("a", "b", "c").zipWithIndex();

5. 결론

이 빠른 사용방법(예제)에서는 zip 작업 을 수행하는 방법을 살펴보았습니다 .

항상 그렇듯이 기사의 코드 예제는 GitHub 에서 찾을 수 있습니다 .

Junit footer banner