使用Map <integer,stringbuilder =“”>的方法merge()将字符串附加到StringBuilder(value)

时间:2018-09-22 03:51:54

标签: java

我知道如果我有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));

1 个答案:

答案 0 :(得分:2)

map.computeIfAbsent(“key”, k -> new StringBuilder()).append(s);

k-> new StringBuilder()是lambda函数。这里k代表地图中的当前键。就是说,如果地图不包含“键”,则使用此lambda计算一个值。 Lambda接受键并返回值。由于在这种情况下,该值不依赖于键的值,因此我们仅直接返回一个新的StringBuilder。然后我们只需附加字符串s