Sie haben ein wenig Probleme mit der Stream-API, um eine Eins-zu-eins-Zuordnung zu erhalten. Im Grunde sagen Sie, dass Sie eine Klasse haben.Eins-zu-eins-Karte mit Java-Streams
public class Item {
private final String uuid;
private Item(String uuid) {
this.uuid = uuid;
}
/**
* @return universally unique identifier
*/
public String getUuid() {
return uuid;
}
}
Ich möchte eine Map<String, Item>
für einfache Suche. Aber angesichts einer Stream<Item>
scheint es nicht eine einfache Möglichkeit, um diese Map<String, Item>
zu erreichen.
Offensichtlich ist Map<String, List<Item>>
kein Ding:
public static Map<String, List<Item>> streamToOneToMany(Stream<Item> itemStream) {
return itemStream.collect(groupingBy(Item::getUuid));
}
der sichere Nutzung der allgemeineren Fall ist, aber wir in dieser Situation wissen tun, dass es immer nur eine Eins-zu-eins sein. Ich kann jedoch nichts finden, was kompiliert - ich habe speziell versucht, mit dem downstream
Parameter zu Collectors.groupingBy
zu misten. Etwas wie:
// DOESN'T COMPILE
public static Map<String, Item> streamToOneToOne(Stream<Item> itemStream) {
return itemStream.collect(groupingBy(Item::getUuid, Function.identity()));
}
Was vermisse ich?
Es lohnt fügte hinzu, dass eine Ausnahme ausgelöst wird, wenn sich wiederholende Schlüssel erfolgt. –