通过java 8接口改进map中的containsKey

deg*_*ath 3 java dictionary java-8

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

Integer id;
Date date;
Integer value;
Run Code Online (Sandbox Code Playgroud)

另一种称为SummaryForm的形式

String title;
String descr;
List<Object> newList;
Run Code Online (Sandbox Code Playgroud)

如何使用Java 8接口提高地图使用率.现在我有一个if语句:

if (map.containsKey(key)) {
            map.get(key).newList().add(new SummaryForm(time.getDate(), time.getValue()));
        }
Run Code Online (Sandbox Code Playgroud)

是否有任何简单的方法来改进它以避免if语句,使用map.containsKey?在我看来,我需要像putIfPresent这样的东西,但似乎只有putIfAbsent方法.

Eug*_*ene 6

Map由于引入了默认方法,Java 8中有几种新方法可以扩展接口,因此可以保持向后兼容性.

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

但是看起来你在computeIfPresent这里寻找:

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

  • @degath你可以通过`containsKey`和`get`进行两次搜索来简化你的初始代码,但只做一个`get`并检查返回值是否为'null` (3认同)
  • 既然你这么快我就在这里捐了我答案的第一部分. (2认同)
  • @Kayaman)))我按了`编辑`,就像......什么?还有比我更多的角色 (2认同)