자바 압축 집합의 세 가지 방법

머리말
이 문 제 는 개발 과정 에서 가끔 발생 하 는 작은 문제 라 고 할 수 있다.예 를 들 어 어떻게 두 개의 집합 을 하나의 논리 적 집합 으로 압축 하 느 냐 하 는 것 이다.
만약 네가 이해 하지 못 한다 면,우 리 는 간단 한 예 를 보고 압축 집합 이 무엇 인지 설명 할 수 있다.이 글 은 길지 않 지만 비교적 실 용적 인 작은 기교 라 고 할 수 있다.주요 내용 은 외국 의 작은 형 Baeldung 의 블 로그 에서 유래 되 었 습 니 다.다음은 주 소 를 드 리 겠 습 니 다.
https://www.baeldung.com/java-collections-zip
이 사내 아 이 는 비록 매우 상세 하 게 썼 지만,약간의 세부 적 인 문제 가 있다.나 는 이 기초 위 에서 한 번 현장 검증 을 했 는데,몇 개의 구덩이 가 있 는 것 을 발 견 했 지만,이미 다 메 웠 다.
사례 는 압축 집합 이 무엇 인지 설명 한다.
현재 두 개의 집합 이 있 습 니 다:names 와 ages

List<String> names = new ArrayList<>(Arrays.asList("  ", "  ", "  "));
List<Integer> ages = new ArrayList<>(Arrays.asList(24, 25, 27));
압축 이 끝 난 후에 우 리 는 압축 대상 을 옮 겨 다 니 며 다음 과 같은 형식 으로 변 했다.

  :24
  :25
  :27
즉,name:age 의 키 값 이 맞 는 형식 입 니 다.물론 우리 의 집합 이 비교적 많 으 면 우 리 는 더 많은 집합 을 압축 할 수 있 습 니 다.예 를 들 어 한 사람의 각종 정보,id:name:age 등.
OK,압축 이 무엇 인지 알 게 되 었 습 니 다.다음은 장황 하 게 말 하지 않 고 압축 의 몇 가지 형식 을 제시 합 니 다.
압축 집합의 몇 가지 방식
방식 1:Java 8 의 IntStream

List<String> names = new ArrayList<>(Arrays.asList("  ", "  ", "  "));
List<Integer> ages = new ArrayList<>(Arrays.asList(24, 25, 27));
//   :java8 IntSream
Stream<String> stream = IntStream
      .range(0, Math.min(names.size(), ages.size()))
      .mapToObj(i -> names.get(i) + ":" + ages.get(i));
//    
stream.forEach(System.out::println);
이런 방식 은 비교적 간단 해서 두 집합의 흐름 을 얻 은 후에 대상 으로 전환한다.자바 8 은 직접 사용 할 수 있 습 니 다.
방식 2:Guava Streams

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

//   :guava
//   
Streams.forEachPair(
       Stream.of("  ", "  ", "  "),
       Stream.of(1, 2,3),
       (name, age) -> System.out.println(name + ":" + age));
//   :
Stream<String> stream2 = Streams.zip(names.stream(), ages.stream(), 
        (name, age) -> name + ":" + age);
stream2.forEach(System.out::println);
//   :
Stream<String> stream3 = Streams.mapWithIndex(
        Stream.of("a", "b", "c"),
        (str, index) -> str + ":" + index);
stream3.forEach(System.out::println);
이상 은 몇 가지 실현 방식 입 니 다.이 큰 사람 은 하 나 를 제 시 했 고 저 는 홈 페이지 에 가서 다른 몇 가 지 를 찾 았 습 니 다.또한 guava 를 사용 할 때 버 전 은 21 이상 을 요구 합 니 다.pom 파일 에 다음 의존 도 를 추가 하면 됩 니 다.

<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>30.1-jre</version>
 </dependency>
이곳 에 서 는 최신 판 을 주의 깊 게 사용 하면 된다.다른 건 틀 릴 수도 있어.나 는 버 전 21 을 시험 해 보 았 는데 도 틀 렸 다.
방식 3:Using jOOλ (jOOL)
jOOL 은 자바 8 Lambda 에서 재 미 있 는 새로운 기능 을 제공 하고 Tuple 1 부터 Tuple 16 까지 의 지원 을 통 해 zip 작업 이 더욱 재 미 있 게 되 었 습 니 다.

//   :jool
//   
Seq<Tuple2<String,Integer>> s1 = Seq.of("  ","  ", "  ")
    .zip(Seq.of(24,25,27));
//   
Seq<String> s2 = Seq.of(1, 2, 3)
    .zip(Seq.of("a", "b", "c"), (x, y) -> x + ":" + y);
//   
Seq<Tuple2<String,Long>> s3 = Seq.of("a", "b", "c").zipWithIndex();
s1.forEach(System.out::println);
s2.forEach(System.out::println);
s3.forEach(System.out::println);
Seq 결 과 는 압축 모듈 입 니 다.볼 수 있 습 니 다.

(tuple(1, "a"), tuple(2, "b"), tuple(3, "c"))
이런 방식 도 의존 을 더 해 야 한다.pom 파일 에 다음 의존 도 를 추가 하면 됩 니 다.

<dependency>
     <groupId>org.jooq</groupId>
     <artifactId>jool-java-8</artifactId>
     <version>0.9.14</version>
</dependency>
ok,그리고 많은 것 이 있 습 니 다.기본 사상 은 모두 흐름 으로 자 르 고 합병 합 니 다.이것 은 자바 로 직접 실현 해도 됩 니 다.
결론.
'zip'작업 은 표준'concat'나'merge'와 조금 다르다.'concat'또는'merge'작업 은 기 존 집합 말미 에 새로운 집합 을 간단하게 추가 하고'zip'작업 은 각 집합 에서 하나의 요 소 를 가 져 와 조합 합 니 다.
이상 은 자바 압축 집합 의 세 가지 방법 에 대한 상세 한 내용 입 니 다.자바 압축 집합 에 관 한 자 료 는 우리 의 다른 관련 글 을 주목 하 세 요!

좋은 웹페이지 즐겨찾기