스트림 필터에서 일치 항목 계산

1. 개요

이 자습서에서는 Stream.count () 메서드 사용에 대해 알아 봅니다 . 특히, 우리 가 적용한 Predicate 의 일치를 계산하기 위해 count () 메서드와 filter () 메서드를 결합하는 방법을 살펴 보겠습니다.

2. Stream.count () 사용

수 () 메소드 자체는 작지만 매우 유용한 기능을 제공합니다. 예를 들어 Stream.filter () 와 같은 다른 도구와 훌륭하게 결합 할 수도 있습니다 .

Stream.filter () 에 대한 자습서에서 정의한 것과 동일한 Customer 클래스를 사용하겠습니다 .

public class Customer { private String name; private int points; //Constructor and standard getters }

또한 동일한 고객 컬렉션을 만듭니다.

Customer john = new Customer("John P.", 15); Customer sarah = new Customer("Sarah M.", 200); Customer charles = new Customer("Charles B.", 150); Customer mary = new Customer("Mary T.", 1); List customers = Arrays.asList(john, sarah, charles, mary);

다음으로 목록에 Stream 메서드를 적용 하여 필터링하고 필터가 일치하는 항목 수를 결정합니다.

2.1. 계수 요소

count () 의 기본적인 사용법을 살펴 보겠습니다 .

long count = customers.stream().count(); assertThat(count).isEqualTo(4L);

그 주 () 수를 반환 값입니다.

2.2. 사용 개수 ()필터 ()

이전 하위 섹션의 예는 그다지 인상적이지 않았습니다. List.size () 메서드 를 사용하여 동일한 결과를 얻을 수 있습니다 .

Stream.count () 는 다른 Stream 메서드 와 결합 할 때 정말 빛납니다 – 대부분 filter () 와 함께 사용 합니다 .

long countBigCustomers = customers .stream() .filter(c -> c.getPoints() > 100) .count(); assertThat(countBigCustomers).isEqualTo(2L);

이 예에서는 고객 목록에 필터를 적용했으며 조건을 충족하는 고객 수도 얻었습니다. 이 경우 포인트가 100 점 이상인 고객이 두 명 있습니다.

물론 필터와 일치하는 요소가 없을 수도 있습니다.

long count = customers .stream() .filter(c -> c.getPoints() > 500) .count(); assertThat(count).isEqualTo(0L); 

2.3. 사용 수 () 고급 필터를

filter () 에 대한 튜토리얼 에서 우리는 메소드의 고급 사용 사례를 보았습니다. 물론 우리는 여전히 그러한 filter () 연산 의 결과를 계산할 수 있습니다 .

여러 기준으로 컬렉션을 필터링 할 수 있습니다.

long count = customers .stream() .filter(c -> c.getPoints() > 10 && c.getName().startsWith("Charles")) .count(); assertThat(count).isEqualTo(1L);

여기에서 이름이 "Charles"로 시작하고 10 점이 넘는 고객 수를 필터링하고 계산했습니다.

기준을 자체 메서드로 추출하고 메서드 참조를 사용할 수도 있습니다.

long count = customers .stream() .filter(Customer::hasOverHundredPoints) .count(); assertThat(count).isEqualTo(2L);

3. 결론

이 기사에서는 count () 메서드를 filter () 메서드 와 함께 사용하여 스트림을 처리 하는 방법에 대한 몇 가지 예를 살펴 보았습니다 . count () 의 추가 사용 사례에 대해서는 스트림을 concat ()으로 병합 하는 방법 에 대한 자습서에 표시된 것과 같이 Stream 을 반환하는 다른 메서드를 확인하세요 .

항상 그렇듯이 전체 코드는 GitHub에서 사용할 수 있습니다.