Heim  >  Artikel  >  Java  >  So nutzen Sie die neuen Funktionen von Java9 Stream Collectors

So nutzen Sie die neuen Funktionen von Java9 Stream Collectors

WBOY
WBOYnach vorne
2023-04-19 15:57:29886Durchsuche

Neue Funktionen von Java 9 Stream Collectors

Java 8 führt Collectors ein, die zum Sammeln von Eingabeelementen in veränderlichen Containern wie Map, List und Set verwendet werden. Dieser Artikel wirft einen Blick auf die beiden neuen Collectors in Java 9: ​​Collectors.filtering und Collectors.flatMapping, die hauptsächlich zur Bereitstellung intelligenter Elementsammlungen zusammen mit Collectors.groupingBy verwendet werden. Die

Collectors.filtering-Methode

Collectors.filtering-Methode ist ähnlich Im Vergleich zur Stream filter()-Methode wird letztere zum Filtern von Eingabeelementen verwendet, die Verwendungsszenarien der beiden sind jedoch unterschiedlich. Stream filter() wird in der Stream-Chaining-Methode verwendet, während die Collectors.filtering-Methode für die Verwendung mit groupingBy konzipiert ist.

Stream filter() filtert zunächst Elemente und gruppiert sie dann. Gefilterte Werte werden verworfen und können nicht rückwirkend nachvollzogen werden. Wenn Sie Dinge verfolgen müssen, die Sie zuerst gruppieren und dann filtern müssen, kann Collectors.filtering genau das tun.

Collectors.filtering verwendet einen Funktionsparameter, um die Eingabeparameter zu filtern und dann die gefilterten Elemente zu sammeln:

@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-Methode

Collectors.flatMapping ähnelt der Collectors.mapping-Methode, ist jedoch detaillierter. Beide benötigen eine Funktion und einen Kollektorparameter, um Elemente zu sammeln, aber die flatMapping-Funktion empfängt einen Strom von Elementen und führt dann eine Akkumulationsoperation über den Kollektor durch. Schauen wir uns zunächst die Modellklasse an: Die Methode

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.flatMapping überspringt die Zwischensammlung und schreibt direkt in einen einzelnen Gruppenzuordnungscontainer, der durch Collectors.groupingBy definiert wird:

@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 ordnet alle Gruppierungswerte (Kommentare des Autors) zu ​in einem Container gesammelt, z. B. List. Und löschen Sie die Zwischensammlung und speichern Sie die Sammlung direkt im Container des Sammlers.

Das obige ist der detaillierte Inhalt vonSo nutzen Sie die neuen Funktionen von Java9 Stream Collectors. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen