流式传输地图以添加值

时间:2018-01-28 15:40:41

标签: java java-8

我有一些代码看起来有点笨拙。我想让它更具功能性的编程风格,但我正在努力。我想知道是否有人可以帮忙(或者这可能是最好的方式?)?

private Map<String, Integer> container;

public void addItemToMap(String item, Integer quantity ){

        if(container.containsKey(item)){
            container.compute(item, (k,v ) -> Integer.valueOf(v+quantity));
        }else{
            container.put(item, quantity);
        }
    }

感谢。

2 个答案:

答案 0 :(得分:3)

您可以使用以下一个班轮替换if-else

container.compute(item,(k,v) -> v == null ? quantity : Integer.valueOf(v+quantity));

在上面的例子中。假设存在非空值。

但是,正如Sotirios在评论中提到的那样,Map.compute doc中也提到过,最好在这里使用Map.merge,如下所示(ref):

map.merge(item, quantity, Integer::sum)

答案 1 :(得分:2)

您是否只是将该地图用作计数器?

我会建议番石榴的Multiset:你的功能只是打电话给Multiset#add()