使用java 8 Streams对项目列表进行分组,并使用FIRST Item而不是List填充生成的Map

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中有没有办法实现我想要的结果?

Ben*_*der 3

您可以使用: Map<Integer, Item> itemsMap = items.stream().collect(Collectors.toMap(Item::getId, Function.<Item>identity()));