我知道如果我有Map< Character, Integer>
而不是这样做:
示例_1:
int value = map.get(key);
if (value != null) {
map.put(key, value + 1);
} else {
map.put(key, 1);
}
我可以在ONE行中执行与Example_1相同的操作。
Example_2:
map.merge(c, 1, Integer::sum);
我想知道是否可以通过Map<Integer,StringBuilder>
实现相同的功能(一条语句)。
Example_3:
String s = "something";
StringBuilder value = map.get(key);
if (value != null) {
map.get(key).append(s);
} else {
map.put(key, new StringBuilder(s));
}
所以我想知道是否有一种更优雅的方法可以使用merge()方法或类似方法在Example_3中表达代码。
我尝试了此方法,但是它不起作用:
Example_4:
map.merge(key, new StringBuilder(s), value.append(s));
答案 0 :(得分:2)
map.computeIfAbsent(“key”, k -> new StringBuilder()).append(s);
k-> new StringBuilder()是lambda函数。这里k代表地图中的当前键。就是说,如果地图不包含“键”,则使用此lambda计算一个值。 Lambda接受键并返回值。由于在这种情况下,该值不依赖于键的值,因此我们仅直接返回一个新的StringBuilder。然后我们只需附加字符串s