> Java > java지도 시간 > 본문

Java9 스트림 수집기의 새로운 기능을 사용하는 방법

WBOY
풀어 주다: 2023-04-19 15:57:29
앞으로
933명이 탐색했습니다.

Java 9 스트림 수집기의 새로운 기능

Java 8에는 Map, List 및 Set과 같은 변경 가능한 컨테이너에 입력 요소를 축적하는 데 사용되는 수집기가 도입되었습니다. 이 기사에서는 주로 Collectors.groupingBy와 함께 스마트 요소 컬렉션을 제공하는 데 사용되는 Java 9의 두 가지 새로운 수집기인 Collectors.filtering 및 Collectors.FlatMapping을 살펴봅니다.

Collectors.filtering 메서드

Collectors.filtering 방법은 비슷합니다. Stream filter() 방법과 비교할 때 후자는 입력 요소를 필터링하는 데 사용되지만 사용 시나리오는 다릅니다. Stream filter()는 스트림 체인 방법에 사용되는 반면 Collectors.filtering 방법은 groupingBy와 함께 사용되도록 설계되었습니다.

Stream filter()는 먼저 요소를 필터링한 다음 그룹화합니다. 필터링된 값은 폐기되며 소급하여 추적할 수 없습니다. 먼저 그룹화한 다음 필터링해야 하는 항목을 추적해야 하는 경우 이것이 바로 Collectors.filtering이 수행할 수 있는 작업입니다.

Collectors.filtering은 함수 매개 변수를 사용하여 입력 매개 변수를 필터링한 다음 필터링된 요소를 수집합니다.

@Test
public void givenList_whenSatifyPredicate_thenMapValueWithOccurences() {

List<Integer> numbers = List.of(1, 2, 3, 5, 5);

Map<Integer, Long> result = numbers.stream()
 .filter(val -> val > 3)
 .collect(Collectors.groupingBy(i -> i, Collectors.counting()));

assertEquals(1, result.size());

result = numbers.stream()
 .collect(Collectors.groupingBy(i -> i,
  Collectors.filtering(val -> val > 3, Collectors.counting())));

assertEquals(4, result.size());
}
로그인 후 복사

Collectors.FlatMapping 메서드

Collectors.flallMapping은 Collectors.mapping 메서드와 유사하지만 더 세부적입니다. 둘 다 요소를 수집하기 위해 함수와 수집기 매개 변수를 사용하지만 flatMapping 함수는 요소 스트림을 받은 다음 수집기를 통해 누적 작업을 수행합니다. 먼저 모델 클래스를 살펴보겠습니다.

class Blog {

private String authorName;
private List<String> comments = new ArrayList<>();

public Blog(String authorName, String ... comment){
  this.authorName = authorName;
  comments.addAll(Arrays.asList(comment));
}

public String getAuthorName(){
  return this.authorName;
}

public List<String> getComments(){
  return comments;
}
}
로그인 후 복사

Collectors.platMapping 메서드는 중간 컬렉션을 건너뛰고 Collectors.groupingBy에서 정의한 단일 그룹 매핑 컨테이너에 직접 씁니다.

@Test
public void givenListOfBlogs_whenAuthorName_thenMapAuthorWithComments() {

Blog blog1 = new Blog("1", "Nice", "Very Nice");
Blog blog2 = new Blog("2", "Disappointing", "Ok", "Could be better");
List<Blog> blogs = List.of(blog1, blog2);
   
Map<String, List<List<String>>> authorComments1 = blogs.stream()
 .collect(Collectors.groupingBy(Blog::getAuthorName, 
  Collectors.mapping(Blog::getComments, Collectors.toList())));
  
assertEquals(2, authorComments1.size());
assertEquals(2, authorComments1.get("1").get(0).size());
assertEquals(3, authorComments1.get("2").get(0).size());

Map<String, List<String>> authorComments2 = blogs.stream()
 .collect(Collectors.groupingBy(Blog::getAuthorName, 
  Collectors.flatMapping(blog -> blog.getComments().stream(), 
  Collectors.toList())));

assertEquals(2, authorComments2.size());
assertEquals(2, authorComments2.get("1").size());
assertEquals(3, authorComments2.get("2").size());
}
로그인 후 복사

Collectors.mapping은 모든 그룹화(작성자의 설명) 값을 매핑합니다. List와 같은 컨테이너에 수집됩니다. 그리고 중간 컬렉션을 삭제하고 컬렉션을 수집기의 컨테이너에 직접 저장합니다.

위 내용은 Java9 스트림 수집기의 새로운 기능을 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:yisu.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿