Heim >Java >javaLernprogramm >Item Geben Sie Funktionen ohne Nebenwirkungen in Streams den Vorzug
Einführung in die Verwendung von Streams:
Strukturierung der Berechnung:
Nebenwirkungen:
Beispiel 1: Code mit Nebenwirkungen
Map<String, Long> freq = new HashMap<>(); try (Stream<String> words = new Scanner(file).tokens()) { words.forEach(word -> { freq.merge(word.toLowerCase(), 1L, Long::sum); }); }
Problem: Dieser Code verwendet forEach, um den externen Status (freq) zu ändern. Es ist iterativ und nutzt keine Streams.
Beispiel 2: Code ohne Nebenwirkungen
Map<String, Long> freq; try (Stream<String> words = new Scanner(file).tokens()) { freq = words.collect(Collectors.groupingBy(String::toLowerCase, Collectors.counting())); }
Lösung: Verwendet den Collectors.groupingBy-Kollektor, um die Häufigkeitstabelle zu erstellen, ohne den externen Status zu ändern. Kürzer, klarer und effizienter.
Aneignung der Streams-API:
Sammler:
Beispiel 3: Extrahieren einer Liste der zehn häufigsten Wörter
List<String> topTen = freq.entrySet().stream() .sorted(Map.Entry.<String, Long>comparingByValue().reversed()) .limit(10) .map(Map.Entry::getKey) .collect(Collectors.toList());
Erklärung:
Komplexität der Collectors-API:
Karten und Sammelstrategien:
Beispiel 4: Verwendung von toMap mit Merge-Funktion
Map<String, Long> freq; try (Stream<String> words = new Scanner(file).tokens()) { freq = words.collect(Collectors.toMap( String::toLowerCase, word -> 1L, Long::sum )); }
Erklärung:
Beispiel 5: Alben nach Künstler gruppieren und das meistverkaufte Album finden
Map<Artist, Album> topAlbums = albums.stream() .collect(Collectors.toMap( Album::getArtist, Function.identity(), BinaryOperator.maxBy(Comparator.comparing(Album::sales)) ));
Erklärung:
String-Sammlung:
Collectors.joining zum Verketten von Zeichenfolgen mit optionalen Trennzeichen.
Beispiel 6: Zeichenfolgen mit Trennzeichen verketten
String result = Stream.of("came", "saw", "conquered") .collect(Collectors.joining(", ", "[", "]"));
Erklärung:
Fazit:
Das obige ist der detaillierte Inhalt vonItem Geben Sie Funktionen ohne Nebenwirkungen in Streams den Vorzug. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!