Имея небольшую проблему с использованием Stream API для получения сопоставления один к одному. В принципе, скажем, у вас есть класс.Индивидуальная карта с потоками Java
public class Item {
private final String uuid;
private Item(String uuid) {
this.uuid = uuid;
}
/**
* @return universally unique identifier
*/
public String getUuid() {
return uuid;
}
}
Я хотел бы получить Map<String, Item>
для удобства поиска. Но, учитывая Stream<Item>
, нет простого способа добраться до этого Map<String, Item>
.
Очевидно, что Map<String, List<Item>>
не не вещь:
public static Map<String, List<Item>> streamToOneToMany(Stream<Item> itemStream) {
return itemStream.collect(groupingBy(Item::getUuid));
}
Это безопаснее и более общий случай, но мы сделать знаю в этой ситуации, что там будет только когда будет один-к-одному. Я не могу найти что-либо, что компилирует, хотя я специально пытался обмануть параметр downstream
до Collectors.groupingBy
. Что-то вроде:
// DOESN'T COMPILE
public static Map<String, Item> streamToOneToOne(Stream<Item> itemStream) {
return itemStream.collect(groupingBy(Item::getUuid, Function.identity()));
}
Что мне не хватает?
Это стоит добавить, что будет сгенерировано исключение, если происходит повторение ключ. –