Problemi con l'API Stream per ottenere un mapping uno a uno. Fondamentalmente, dì che hai una lezione.Mappa one-to-one con flussi Java
public class Item {
private final String uuid;
private Item(String uuid) {
this.uuid = uuid;
}
/**
* @return universally unique identifier
*/
public String getUuid() {
return uuid;
}
}
Mi piacerebbe un Map<String, Item>
per una facile ricerca. Ma dato un Stream<Item>
non sembra un modo semplice per arrivare a quello Map<String, Item>
.
Ovviamente, Map<String, List<Item>>
non è nessuna cosa:
public static Map<String, List<Item>> streamToOneToMany(Stream<Item> itemStream) {
return itemStream.collect(groupingBy(Item::getUuid));
}
Questo è il caso più generale più sicuri, ma abbiamo fare sanno in questa situazione che ci sarà sempre solo uno-a-uno. Non riesco a trovare nulla che compili anche se - Ho specificamente cercato di eliminare il parametro downstream
a Collectors.groupingBy
. Qualcosa di simile:
// DOESN'T COMPILE
public static Map<String, Item> streamToOneToOne(Stream<Item> itemStream) {
return itemStream.collect(groupingBy(Item::getUuid, Function.identity()));
}
Cosa mi manca?
E 'la pena di aggiungere che un'eccezione verrà generata se si verifica chiave ripetere. –