[英]Collect List<Object> to Map<String, List<Object>> in Java 8 using stream
[英]Java 8 extracting/coverting List<Object> into Map<String, List<String>> using stream()
試圖找出如何有效地在我的代碼中使用新的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));
我得到的項目列表看起來像:
list(0):Name1:Value1
list(1):Name1:Value2
list(2):Name2:Value1
list(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):列表{Name1:Value1,Name1:Value2}
MapKey(Name2):列表{Name2:Value1}
MapKey(Name3):列出{Name3:Value3}
如何使用stream()重寫代碼(2)以獲得相同的結果?
您似乎正在實施標准的“分組依據”原語。 Streams API支持開箱即用:
Map<String, List<Item>> itemsByName =
list.stream().collect(Collectors.groupingBy(Item::getName));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.