如果使用map计数,当map中不存在这个key时,map.put(key, map.getOrDefault(key, 0) + 1);
可以使用merge,更优雅的实现.代码如下:
@Test
public void merge() {
Integer key = 4;
Map<Integer, Integer> map = new HashMap<>();
map.put(3, map.getOrDefault(3, 0) + 1);
map.merge(key, 1, Integer::sum);
System.out.println(map.get(3));
System.out.println(map.get(key));
Map<Integer, String> map1 = new HashMap<>();
map1.merge(4, "123", String::concat);
System.out.println(map1.get(key));
// 待定 如何实现呢? 参考:computeIfAbsent
Map<Integer, Set<String>> map2 = new HashMap<>();
// map2.merge(4, "123", Set::add);
System.out.println(map2.get(key));
}
输出:
对于上面代码中待定的问题,可以参考下列的代码:
@Test
public void computeIfAbsent() {
Integer key1 = 4;
Map<Integer, Set<String>> map = new HashMap<>();
map.computeIfAbsent(key1, HashSet::new).add("456");
Integer key = 3;
Set<String> set = new HashSet<>();
set.add("123");
map.put(key, set);
map.computeIfAbsent(key, HashSet::new).add("123456");
System.out.println(map);
}
输出:
如果有其他更优雅的写法,欢迎留言交流.
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。