Исправление потока Java 8 Методы промежуточного потока не следует оставлять неиспользованной проблемой сонара - PullRequest
0 голосов
/ 18 января 2019
 group.getTeamMemberIds().stream().filter(id -> userMap.containsKey(id)).
            map(id -> groupDTO.getTeamMembers().add(userMap.get(id)));

Сонар обнаруживает это, поскольку методы Промежуточного потока не следует оставлять неиспользованными. Основная ошибка

1 Ответ

0 голосов
/ 18 января 2019

Здесь нет терминальной операции, поэтому этот поток не будет выполнен; таким образом «неиспользованная» ошибка сонара.

У вас также есть побочные эффекты в: 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

...