map.merge(key, value, Double::sum);
我想更新。我可以使用类似的东西
if (!map.containsKey(key)) map.put(key, new List());
map.get(key).add(value);
有没有更优雅的方式使用合并来实现这一点?
merge
方法:
map.merge(key,
List.of(value),
(l1, l2) -> Stream.concat(l1.stream(), Stream.of(value)).collect(Collectors.toList()));
注意:我在这里使用Stream
是因为列表可以是不可变的(初始值就是这样的
List.of(value)
)但是,除非您使用
ConcurrentHashMap
,否则我怀疑这是否会像简单的
if
解决方案一样优雅。
final Map<String, List<X>> result = list.stream().collect(Collectors.groupingBy(x -> x.key, Collectors.toList()));
否则,你可以使用computeIfAbsent,但它与你已经得到的基本相同
result.computeIfAbsent(x.key, (key) -> new ArrayList<>()).add(x);
map.merge(key, Arrays.asList(new String[]{newStringToBeAdded}), (oldList, newList) -> {
return new ArrayList<String>(){{
addAll(oldList);
addAll(newList);
}};
});
为了方便起见,我们在这里使用双括号初始化。