group.getTeamMemberIds().stream().filter(id -> userMap.containsKey(id)).
map(id -> groupDTO.getTeamMembers().add(userMap.get(id)));
Sonar检测到此情况,因为不应将Intermediate Stream方法保留为主要错误
答案 0 :(得分:5)
这里没有终端操作,因此将不执行该流;因此声纳出现“未使用”错误。
您也有以下副作用:id -> groupDTO.getTeamMembers().add(userMap.get(id)
有更好的解决方法:
List<String> teamMembers = group.getTeamMemberIds() // I assume String here...
.stream()
.map(userMap::get)
.filter(Objects::notNull)
.collect(Collectors.toList());
groupDTO.getTeamMembers().addAll(teamMembers);
您几乎不需要containsKey
后跟get
-通过执行get
并查看结果是否不是null
答案 1 :(得分:2)
如果getTeamMembers是一个Set或地图值是唯一的(ID!):
groupDTO.getTeamMembers().addAll(userMap.values());
否则
groupDTO.getTeamMembers().addAll(new HashSet<String>(userMap.values()));
错误是Stream是运行的准备;直到完成最后的终止操作:.forEach
或.collect
等。按照编码,甚至不需要执行任何操作,即死代码。