Für diejenigen, die gerade mit dem Programmieren einschließlich der Java-Sprache begonnen haben, und für diejenigen, die es bereits gelernt haben, zur Überprüfung Dieses Mal schreibe ich, um mehr über ** Stream API ** zu erfahren.
Eine von Java8 eingeführte Funktion, eine API, mit der Sie die Elemente der Sammlung bearbeiten können.
Streaming-Sammlung → Zwischenoperation (Datenverarbeitung) → Beendigungsoperation (Verarbeiten von verarbeiteten Daten)
Es wird zum Ablauf der Verarbeitung.
Da es möglich ist, mehrere Zwischenoperationen der Stream-API zu beschreiben, ist es möglich, Prozesse, die kompliziert erscheinen, klar zu beschreiben.
In einigen Fällen wird eine funktionale Schnittstelle als Argument für jede Methode empfangen, und dort wird ein Lambda-Ausdruck verwendet, aber die Erklärung dort wird weggelassen. Siehe ** Über Lambda Expression **.
Vergleichen wir mit einem einfachen Beispiel, wie man tatsächlich damit umgeht.
Implementieren Sie zunächst ohne Verwendung der Stream-API.
python
List<String> names = Arrays.asList("Ryo Ose", "Samura Kawachi", "Kikuchi", "Grat", "Nagano", "Jonouchi");
for (int i = 0; i < names.size(); i++) {
if (names.get(i).length() >= 3) {
if (names.get(i).contains("Innerhalb")) {
System.out.println(names.get(i)); //Samura Kawachi Jonouchi
}
}
}
Verwenden Sie dann die Stream-API, um einen ähnlichen Prozess zu implementieren.
Implementierung mit Stream API
List<String> names = Arrays.asList("Ryo Ose", "Samura Kawachi", "Kikuchi", "Grat", "Nagano", "Jonouchi");
names.stream()
.filter(name -> name.length() >= 3)
.filter(name -> name.contains("Innerhalb"))
.forEach(name -> System.out.println(name)); //Samura Kawachi Jonouchi
Die Verschachtelung ist nicht tief und leicht zu lesen und einfach zu implementieren.
Extrahieren Sie nur die Elemente, die die Bedingungen mit der Filtermethode der Zwischenoperation erfüllen. Die Elemente werden einzeln mit der forEach-Methode der Beendigungsoperation ausgegeben.
Früher habe ich Filter als Zwischenoperationsmethode eingeführt, aber ich werde auch einige andere Methoden einführen.
1.map
Diese Methode führt die für jedes Element angegebene Verarbeitung durch.
Kartenmethode
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
numbers.stream()
.map(num -> num * 2) //Verdoppeln Sie jedes Element
.forEach(num -> System.out.print(num + " ")); // 2 4 6 8 10
2.limit
Diese Methode gibt nur die angegebene Anzahl von Elementen zurück (maxSize).
Limit-Methode
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
numbers.stream()
.limit(3) //Nehmen Sie nur 3 heraus
.forEach(num -> System.out.print(num + " ")); // 1 2 3
3.distinct
Diese Methode gibt die Elemente ohne Duplizierung zurück.
unterschiedliche Methode
List<String> names = Arrays.asList("Kubo", "Endo", "rollen", "Kubo", "Okazaki", "Honda", "rollen", "Endo");
names.stream()
.distinct() //Doppelte Elemente werden entfernt und zurückgegeben
.forEach(name -> System.out.print(name + " ")); //Kubo Endo Vol. Okazaki Honda
4.sorted
Eine Methode, die die Elemente sortiert.
sortierte Methode
List<Integer> numbers = Arrays.asList(1, 5, 3, 2, 4);
numbers.stream()
.sorted() //In aufsteigender Reihenfolge sortieren
.forEach(num -> System.out.print(num + " ")); // 1 2 3 4 5
Sie können auch in absteigender Reihenfolge sortieren, indem Sie die reverseOrder-Methode der Composer-Schnittstelle als Argument der sortierten Methode übergeben.
sortierte Methode
List<Integer> numbers = Arrays.asList(1, 5, 3, 2, 4);
numbers.stream()
.sorted(Comparator.reverseOrder()) //In absteigender Reihenfolge sortieren
.forEach(num -> System.out.print(num + " ")); // 5 4 3 2 1
Bisher wurde die forEach-Methode als Beendigungsoperationsmethode verwendet, wir werden jedoch auch einige andere Methoden einführen.
1.anyMatch
Eine Methode, die abhängig von der Bedingung einen Booleschen Wert zurückgibt. Gibt true zurück, wenn eines der Elemente der Bedingung entspricht. (Teilweise Spielbeurteilung)
anyMatch-Methode
List<String> fruits = Arrays.asList("banana", "apple", "orange", "pineapple");
boolean result = fruits.stream()
.anyMatch(fruit -> fruit.length() >= 7); //Bestimmen Sie, ob es ein Element mit 7 oder mehr Zeichen gibt
System.out.println(result); // true
2.allMatch
Eine Methode, die abhängig von der Bedingung einen Booleschen Wert zurückgibt. Gibt true zurück, wenn alle Elemente die Bedingungen erfüllen. (Alle Match Match)
allMatch-Methode
List<Integer> numbers = Arrays.asList(2, 4, 6, 7, 8, 10);
boolean result = numbers.stream()
.allMatch(num -> num % 2 == 0); //Feststellen, ob alle Elemente gerade sind
System.out.println(result); // false
3.noneMatch
Eine Methode, die abhängig von der Bedingung einen Booleschen Wert zurückgibt. Gibt false zurück, wenn eines der Elemente der Bedingung entspricht. (Alle nicht übereinstimmenden Urteile)
noneMatch-Methode
List<String> names = Arrays.asList("Suzuki", "Matsui", "Noshige", "Ikawa", "Kawasaki", "Shinjo", "Mit Darbish");
boolean result = names.stream()
.noneMatch(name -> name.length() > 4); //Bestimmen Sie, ob es ein Element mit 4 oder mehr Zeichen gibt
System.out.println(result); // false
Ich fand heraus, dass der Quellcode mithilfe der Stream-API einfacher und leichter zu lesen ist, als die Operationen auf die Auflistungselemente selbst zu schreiben. Es mag zunächst verwirrend sein, aber ich möchte mich mit dem Lambda-Stil daran erinnern.
** [Oracle Official streamen](https://docs.oracle.com/javase/jp/11/docs/api/java.base/java/util/stream/Stream.html#anyMatch (java.util.function). Prädikat)) ** ** [Java] Kenntnisse, die durch das weitere Schreiben der Stream-API gewonnen wurden **
Recommended Posts