Bitte helfen Sie mir, den Teil in der Methodenkette (Java 8) zu verstehen.
Ruslan Satarow
Bitte helfen Sie mir, den Teil in der Methodenkette (Java 8) zu verstehen.
map.stream() .sorted() .collect(Collectors.toMap( Map.Entry::getKey, Map.Entry::getValue, (e1, e2) -> e1, LinkedHashMap::new )); Diese Kette gibt eine sortierte Karte zurück. Die Frage verursacht ein Lambda im Kollektor: (e1, e2) -> e1 Die Dokumentation sagt, dass dort eine Zusammenführungsfunktion übergeben wird, um Probleme mit identischen Schlüsseln zu lösen. Aber wie genau funktioniert das bestandene Lambda?
Antworten:
Monty Python
Verwendet den ersten gefundenen Wert für diesen Schlüssel. Ich weiß gar nicht, was ich dazu noch sagen soll – die Form der Platte spricht für sich. In Ihrem Fall wird es keine identischen Schlüssel geben, denn die Schlüssel werden Ihnen einfach aus der Quellkarte entnommen, wo sie garantiert einzigartig sind.
Iwan Lymar
Das Lambda im Kollektor, das Ihre Frage aufwirft, ist eine Zusammenführungsfunktion (auf Russisch die Zusammenführungsfunktion) ... jedes Mal, wenn eine Schlüsselduplizierung gefunden wird, wird sie aufgerufen und der Wert des Schlüssels mit der Duplizierung ist gleich der Ergebnis der Funktion, in Ihrem speziellen Fall wählen wir immer den Wert des ersten Schlüssels. Es ist offensichtlich, dass die Verwendung in Ihrem Beispiel (auf einer Karte) keinen Sinn macht, da in der Karte alle Schlüssel eindeutig sind ... hier ist ein angemessenes Beispiel für die Verwendung: Map map1 = new HashMap<>(); map1.put( 1L, "1st" ); map1.put( 2L, "1st" ); Mapmap2 = neue HashMap<>(); map2.put( 2L, "2nd" ); Zuordnungsergebnis = Stream.concat( map1.entrySet().stream(), map2.entrySet().stream() ) .collect( Collectors.toMap( Map.Entry::getKey, Map.Entry::getValue, ( e1 , e2 ) -> e1 ) ); System.out.println (Ergebnis); p.s. Ich verstehe schließlich nicht, wie Sie den Stream auf der Karte genannt haben. Wenn dies ein Entriset ist, dann sollte es entsprechend benannt werden ...