【发布时间】:2022-01-02 17:46:38
【问题描述】:
我有一个列表形式的数据库,然后我使用上面的函数将其转换为 hashMap(已经检查了这个列表不为空或为空)。但是 sonarLint 一直告诉我上面的函数可能返回 null,它可能会捕获 NPE。当我使用增强的for循环时,警告会消失。
我不知道为什么最终,希望你能帮助我离开这里。 非常感谢。
sonarLint 所说的下面的代码可能会返回 null:
return objectList.stream().filter(Objects::nonNull).collect(Collectors.toMap(Object::getField, Function.identity()));
sonarLint 下面的代码说没问题:
Map<String, Object> map = new HashMap<>(); for(Object obj : ObjectList) { map.put(obj.getField(), obj); } return map;
【问题讨论】:
-
我知道您正在检查列表是否不为空,但您没有检查列表中的每个对象是否不为空。在您收集之前添加一个过滤器(Objects::nonNull),以确保每个 Object 不为空
-
感谢您的回复,它帮助我学习了过滤器的使用。我已经按照您的方式确保列表中的每个对象都不为空,但 sonarLint 仍然不断告诉我我用来获取哈希图的方式可能为空。也许我没有说得很清楚:sonarLint 并不是说我使用的方法可能会捕获 NPE,它告诉我我使用的方法可能会返回 null。
标签: java java-stream collectors