Java API의 숨겨진 보석, Teeing

지난주에 저는 사용자 정의 Stream 의 사용 사례 를 설명했습니다Collector . Twitter에서 흥미로운 댓글을 받았습니다.

모자 벗어, 미구엘! 귀하의 의견은 내가 몰랐던 방법을 공개했습니다!

그래서 나는 그 teeing()방법 이 무엇인지 조사하기로 결정했습니다 .

두 개의 다운 스트림 수집기가 복합 된 수집기를 반환합니다. 결과 수집기로 전달 된 모든 요소는 두 다운 스트림 수집기에 의해 처리 된 다음 지정된 병합 기능을 사용하여 결과가 최종 결과로 병합됩니다.

결과 수집기 함수는 다음을 수행합니다.

* 공급자 : 각 수집가의 공급자를 호출하여 얻은 결과 컨테이너를 포함하는 결과 컨테이너를 생성합니다.

* 누산기 : 결과 컨테이너와 입력 요소를 사용하여 각 수집기의 누산기를 호출합니다.

* 결합기 : 두 개의 결과 컨테이너를 사용하여 각 수집기의 결합기를 호출합니다.

* finisher : 결과 컨테이너를 사용하여 각 수집기의 마무리 장치를 호출 한 다음 제공된 병합기를 호출하고 결과를 반환합니다.

— JavaDocs

우리는 실제로 사용자 정의 Collector를 두 가지 간단한 Collector구현 으로 대체 할 수 있습니다 . 하나는 집계 가격 행이고 다른 하나는 카트 가격을 합산하는 것입니다.

최종 코드를보고 한 줄씩 설명해 봅시다.

public PriceAndRows getPriceAndRows(Cart cart) {
  return cart.getProducts()
      .entrySet()
      .stream()
      .map(CartRow::new)                           // 1
      .collect(Collectors.teeing(                  // 2
          Collectors.reducing(                     // 3
              BigDecimal.ZERO,                     // 4
              CartRow::getRowPrice,                // 5
              BigDecimal::add),                    // 6
          Collectors.toList(),                     // 7
          PriceAndRows::new                        // 8
      ));
}

  1. teeing()메서드 호출
  2. 첫 번째 수집가가 가격을 계산합니다. 다음 reducing()과 같은 간단한 호출입니다.
  3. 시작 요소
  4. 함수 란을 추출하는 Price(A)로부터CartRow
  5. BinaryOperator두 개의 가격을 함께 추가하려면 A
  6. 두 번째 수집기 CartRow는 목록으로 집계 합니다.
  7. 마지막으로 마지막 매개 변수는 첫 번째 및 두 번째 수집기의 결과를 집계하는 새 개체를 만듭니다.
  1. 추출 모두의 개별 구성 요소의 각 Collector, 즉 , supplier(), `accumulator(), combiner()및finisher()
  2. 나란히 페어링
  3. Collector쌍을 전달하여 하나의 새 를 만듭니다.

이 게시물이 사용자 정의 teeing() 를 만들기 전에 사용을 고려하게 되었기를 바랍니다 Collector. Miguel에게 다시 한 번 감사드립니다!

그건 그렇고, 나는 항상 새로운 것을 배우는 것이 행복합니다. 공유 할 정보가있는 경우 아래 댓글 시스템이나 Twitter를 사용할 수 있습니다.

이 게시물의 전체 소스 코드 는 Maven 형식의 Github 에서 찾을 수 있습니다 .

더 나아가려면 :

  • Stream Collector의 실제 사례
  • Java 8의 사용자 지정 수집기
  • 티잉 Javadoc

Suggested posts

Spring Boot와 함께 Apache Kafka 구성 및 사용

스프링 부츠를 신은 카프카

Spring Boot와 함께 Apache Kafka 구성 및 사용

소개 Apache Kafka는 대규모, 높은 처리량, 내결함성 실시간 데이터 스트리밍을 처리하는 오픈 소스 분산 스트리밍 플랫폼입니다. 이 시스템은 생산자가 주제에 메시지를 게시하고 소비자가 해당 주제를 구독하여 메시지를 소비하는 게시-구독 모델을 기반으로 합니다.

모바일 개발 마스터하기: 앱에 가장 적합한 프로그래밍 언어를 선택하는 방법

모바일 개발 마스터하기: 앱에 가장 적합한 프로그래밍 언어를 선택하는 방법

모바일 개발은 오늘날의 디지털 세계에서 기업이 성공하기 위한 필수 요소가 되었습니다. 모바일 앱 개발자로서 앱 구축에 적합한 프로그래밍 언어를 선택하는 것이 중요합니다.

Related posts

미디어 재검토: McChesney의 다섯 가지 진실과 커뮤니케이션의 미래

오늘날의 초연결 세계에서 미디어 시스템은 여론을 형성하고 결과적으로 민주적 의사 결정에 중추적인 역할을 합니다. 의사소통의 정치경제학에 대한 심오한 분석에서 학자인 Robert McChesney는 기존의 통념에 도전하고 그가 미디어에 대한 "다섯 가지 진실"이라고 부르는 것을 제시합니다.

Work Week에서의 학습은 생각보다 중요합니다.

Work Week에서의 학습은 생각보다 중요합니다.

우리는 종종 우리에게 좋다고 알고 있는 것을 구현하는 데 어려움을 겪고 있습니다. 중요한 다른 사람에게 우리가 그들을 사랑한다고 말하는 것부터 해적처럼 이야기하는 것을 기억하는 것까지, 그들이 이미 그런 일을 하고 있기 때문에 하루, 일주일 또는 한 달의 이벤트가 필요하지 않다고 주장하는 사람들이 항상 있을 것입니다.

무한한 삶

당신이 자라면 세상은 있는 그대로이고 당신의 삶은 단지 세상 안에서 당신의 삶을 사는 것이며, 결코 당신의 생명을 위험에 빠뜨리지 않고, 정해진 길을 따르고 결국 죽고, 벽을 너무 세게 치세요.하지만 그것은 매우 제한된 삶입니다.

일부 프리랜서가 자신의 삶을 속이는 이유

일부 프리랜서가 자신의 삶을 속이는 이유

나는 최근에 세계 최대의 전문 소셜 네트워크인 Linkedin에 있었고 내가 팔로우하는 프리랜서 디자이너의 게시물을 발견했는데 내 관심을 끌었습니다. 그들은 모두 비행기에서, 노트북과 함께 해변에서, 수영장에서, 멋진 전망이 있는 사무실에서 사진을 게시했습니다.