gpt4 book ai didi

Java 8 使用 stream() 将 List 提取/转换为 Map>
转载 作者:塔克拉玛干 更新时间:2023-11-02 07:46:32 25 4
gpt4 key购买 nike

试图弄清楚如何在我的代码中有效地使用新的 Java 8 功能 .stream()。

这是我的一般代码

List<Item> list = db.query(sqlStatement, (rs, i) -> new Item(rs));

Map<String, List<Item>> itemsByName = new HashMap<>();

for (Item m : list) {
if (!itemsByName.containsKey(m.getName())) {

ArrayList<Item> items = new ArrayList<>();
items.add(m);

itemsByName.put(m.getName(), items);
} else {
itemsByName.get(m.getName()).add(m);
}
}

通过这个 (1)

List<Item> list = db.query(sqlStatement, (rs, i) -> new Item(rs));

我得到如下所示的项目列表:

列表(0):Name1:Value1

列表(1):Name1:Value2

列表(2):Name2:Value1

列表(3):Name3:Value3

通过这个 (2)

Map<String, List<Item>> itemsByName = new HashMap<>();

for (Item m : list) {
if (!itemsByName.containsKey(m.getName())) {

ArrayList<Item> items = new ArrayList<>();
items.add(m);

itemsByName.put(m.getName(), items);
} else {
itemsByName.get(m.getName()).add(m);
}
}

我想得到:

MapKey(Name1): List{Name1:Value1, Name1:Value2}

MapKey(Name2): List{Name2:Value1}

MapKey(Name3): List{Name3:Value3}

如何使用 stream() 重写代码 (2) 以获得相同的结果?

最佳答案

您似乎正在实现标准的“group by”原语。 Streams API 开箱即用地支持这一点:

Map<String, List<Item>> itemsByName = 
list.stream().collect(Collectors.groupingBy(Item::getName));

关于Java 8 使用 stream() 将 List<Object> 提取/转换为 Map<String, List<String>>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24821445/

25 4 0