jwi*_*ner 7 java java-8 java-stream
使用Stream API获取一对一映射时遇到一些麻烦.基本上,说你上课了.
public class Item {
private final String uuid;
private Item(String uuid) {
this.uuid = uuid;
}
/**
* @return universally unique identifier
*/
public String getUuid() {
return uuid;
}
}
Run Code Online (Sandbox Code Playgroud)
我想要一个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));
}
Run Code Online (Sandbox Code Playgroud)
这是更安全更普遍的情况,但在这种情况下我们确实知道只会有一对一的情况.我找不到任何可编译的东西 - 我特意试图将downstream参数设置为muck Collectors.groupingBy.就像是:
// DOESN'T COMPILE
public static Map<String, Item> streamToOneToOne(Stream<Item> itemStream) {
return itemStream.collect(groupingBy(Item::getUuid, Function.identity()));
}
Run Code Online (Sandbox Code Playgroud)
我错过了什么?
Sot*_*lis 12
使用Collectors#toMap(Function, Function),从而产生从每个键Item的uuid和Item作为值本身.
public static Map<String, Item> streamToOneToOne(Stream<Item> itemStream) {
return itemStream.collect(Collectors.toMap(Item::getUuid, Function.identity()));
}
Run Code Online (Sandbox Code Playgroud)
来自javadoc的注释
如果映射的键包含重复项(根据
Object.equals(Object)),IllegalStateException则在执行收集操作时抛出a.如果映射的键可能有重复,请toMap(Function, Function, BinaryOperator)改用.
| 归档时间: |
|
| 查看次数: |
1153 次 |
| 最近记录: |