利用Java8接口改进地图中的if-containsKey

利用Java8接口改进地图中的if-containsKey,java,dictionary,java-8,Java,Dictionary,Java 8,我有一个名为Time with fields的实体/表单: Integer id; Date date; Integer value; 还有另一种形式叫做SummaryForm String title; String descr; List<Object> newList; 有没有简单的方法来改进它,以避免带有map.containsKey的if语句、t? 在我看来,我需要类似于putIfPresent的东西,但似乎只有一个putIfAbsent方法。Java 8中有几个新方法

我有一个名为Time with fields的实体/表单:

Integer id;
Date date;
Integer value;
还有另一种形式叫做SummaryForm

String title;
String descr;
List<Object> newList;
有没有简单的方法来改进它,以避免带有map.containsKey的if语句、t?
在我看来,我需要类似于putIfPresent的东西,但似乎只有一个putIfAbsent方法。

Java 8中有几个新方法,由于引入了默认方法(因此保持了向后兼容性),它们扩展了
Map
接口

没有
putIfPresent
,但是有
replace()
方法可以这样工作

但是,它看起来像您在这里查找
computeIfPresent

map.computeIfPresent(key, (k, value) -> {
    value.newList().add(new SummaryForm(time.getDate(), time.getValue());
    return value;
})

computeIfPresent
?我会在文档中检查它,但是你能用它作为解决方案打印一个答案吗?因为你太快了,我把答案的第一部分捐赠到这里。@Kayaman)))我按了
edit
,就像。。。什么?比我在备选方案中输入的字符多得多的是一个伪值对象,其
newList()
方法返回的内容忽略所有
add
请求。然后,您可以编写
map.getOrDefault(key,SINK).newList().add(newsummaryform(time.getDate(),time.getValue());
。@degath有些人认为越大越好。没有人会比较这两个代码并说“哦,是的,使用
computeIfPresent
肯定是一种改进”.但是如果您在多线程环境中工作,并且
map
ConcurrentMap
,则会有实际的功能差异(后一种方式是原子的)@degath您可以简化初始代码,方法是不通过
containsKey
get
执行两次搜索,而只执行一次
get
并检查返回值是否为
null
map.computeIfPresent(key, (k, value) -> {
    value.newList().add(new SummaryForm(time.getDate(), time.getValue());
    return value;
})