Java 8流修复中间流方法不应该留下未使用的声纳问题

Sam*_*ams -1 java java-8 java-stream sonarqube

 group.getTeamMemberIds().stream().filter(id -> userMap.containsKey(id)).
            map(id -> groupDTO.getTeamMembers().add(userMap.get(id)));
Run Code Online (Sandbox Code Playgroud)

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

Eug*_*ene 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);
Run Code Online (Sandbox Code Playgroud)

你几乎从不需要containsKey跟随get- 你可以避免做两个哈希查找,通过做一个get,看看结果是不是null

  • @Lino`HashMap`是我所知道的允许这个,它被视为一个设计错误 - "Map :: of","ConcurrentHashMap",番石榴`ImmutableMap`以及更多不允许这个 (2认同)