gsd*_*dev 5 java java-8 java-stream
我有一个由以下类定义的项目:
public class Item {
private int id;
private float price;
}
Run Code Online (Sandbox Code Playgroud)
我已经获得了一个项目列表,我需要按ID分组.一旦分组,我知道List只会为每个id包含一个值,所以我希望生成的Map定义如下:
Map<Integer, Item>
Run Code Online (Sandbox Code Playgroud)
而不是:
Map<Integer, List<Item>>
Run Code Online (Sandbox Code Playgroud)
这样做的好处是我的调用代码不需要执行额外的解除引用:
mapName.get(id).get(0)
以下代码将按ID对项目进行分组,并创建包含列表的Map:
Map<Integer, List<Item>> itemsMap = itemList.stream()
.collect(Collectors.groupingBy(Item::getId));
Run Code Online (Sandbox Code Playgroud)
Java 8中有没有办法实现我想要的结果?
您可以使用:
Map<Integer, Item> itemsMap = items.stream().collect(Collectors.toMap(Item::getId, Function.<Item>identity()));