使用Optional时面临NullPointerException

Rah*_*hra 5 java nullpointerexception optional java-8

我正在使用Map<String, Optional<List<String>>>.我得到一个明显NullPointerException的结果是因为结果是null关键.

有没有办法处理null情况?

public Map<MyEnum, Optional<List<String>>> process(Map<MyEnum, Optional<List<String>>> map) {
    Map<MyEnum, Optional<List<String>>> resultMap = new HashMap<>();
    // Getting NullPointerException here, since map.get(MyEnum.ANIMAL) is NULL
    resultMap.put(MyEnum.ANIMAL, doSomething(map.get(MyEnum.ANIMAL).get()));
    // do something more here
}

private Optional<List<String>> doSomething(List<String> list) {
    // process and return a list of String
    return Optional.of(resultList);
}
Run Code Online (Sandbox Code Playgroud)

我试图if-else通过使用Optional 避免检查null.

rge*_*man 5

您可以使用MapgetOrDefault方法.

返回指定键映射到的值,或者defaultValue此映射是否不包含键的映射.

resultMap.put(MyEnum.ANIMAL,
    map.getOrDefault(MyEnum.ANIMAL, Optional.of(new ArrayList<>())) );
Run Code Online (Sandbox Code Playgroud)

这可以避免null通过该方法检查您.

  • 我也在想像`map.getOrDefault(MyEnum.ANIMAL,Optional.empty()).flatMap(this :: doSomething)...`.对于我来说,如果映射不存在,OP实际上想要做的事情有点模棱两可. (2认同)