Java8流修复中间流方法不应被保留为未使用的sonar问题

Java8流修复中间流方法不应被保留为未使用的sonar问题,java,java-8,sonarqube,java-stream,Java,Java 8,Sonarqube,Java Stream,Sonar检测到这一点,因为中间流方法不应被闲置。主要错误这里没有终端操作,因此不会执行此流;因此,声纳的“未使用”错误 在:id->groupDTO.getTeamMembers().add(userMap.get(id) 有更好的方法来解决这个问题: group.getTeamMemberIds().stream().filter(id -> userMap.containsKey(id)). map(id -> groupDTO.getTeamMemb

Sonar检测到这一点,因为中间流方法不应被闲置。主要错误

这里没有终端操作,因此不会执行此流;因此,声纳的“未使用”错误

在:
id->groupDTO.getTeamMembers().add(userMap.get(id)

有更好的方法来解决这个问题:

 group.getTeamMemberIds().stream().filter(id -> userMap.containsKey(id)).
            map(id -> groupDTO.getTeamMembers().add(userMap.get(id)));
List teamMembers=group.getTeamMemberIds()//我假设这里是字符串。。。
.stream()
.map(userMap::get)
.filter(对象::notNull)
.collect(Collectors.toList());
groupDTO.getTeamMembers().addAll(团队成员);

您几乎不需要
containsKey
后跟
get
——您可以通过执行
get
,并查看结果是否为非
null

来避免执行两次哈希查找。好吧,这是为其寻求修复的信息的一半。然而,您的流管道中缺少一个终端操作,如果没有该操作,流将丢失该操作(中间操作,如
map
)也不会被评估…所以这是目前编写的无用代码…这里有更多详细信息,您测试过这一个,没有终端操作符,该语句将如何执行?您能提供更多信息吗?您几乎不需要containsKey后跟get:当然除了使用允许
nul的
Map
时l
键,可能不经常使用,但可能会发生。虽然在这个问题的上下文中,添加
null
团队成员真的没有意义,但我现在明白了,这就是为什么您几乎从未编写过,所以您可能会想到:)@Lino
HashMap
是我所知道的允许这样做的人,它被视为一个设计错误-
Map::of
ConcurrentHashMap
,guava
ImmutableMap
,还有更多的人不允许这样做
List<String> teamMembers = group.getTeamMemberIds() // I assume String here...
                      .stream()
                      .map(userMap::get)
                      .filter(Objects::notNull)
                      .collect(Collectors.toList());


groupDTO.getTeamMembers().addAll(teamMembers);