Исправление потока Java 8 Методы промежуточного потока не следует оставлять неиспользованной проблемой сонара

Поскольку operator[] возвращает ссылку на само значение, поэтому единственный способ указать проблему - это выбросить исключение (и, как правило, STL редко выдает исключения).

Если вы не нравится это поведение, вы можете использовать map::find вместо этого. Он возвращает итератор вместо значения. Это позволяет ему возвращать специальный итератор, когда значение не найдено (оно возвращает map::end), но также требует от вас разыменования итератора, чтобы получить значение.

-1
задан Naman 18 January 2019 в 12:21
поделиться

2 ответа

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

У вас также есть побочные эффекты в: 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, а затем [113 ] - вы можете избежать двух поисков по хешу, выполнив get и посмотреть, не является ли результат null

0
ответ дан Eugene 18 January 2019 в 12:21
поделиться

Если getTeamMembers является множеством или значения карты уникальны (идентификатор!):

groupDTO.getTeamMembers().addAll(userMap.values());

В противном случае

groupDTO.getTeamMembers().addAll(new HashSet<String>(userMap.values()));

Ошибка заключается в том, что поток является подготовкой бежать; пока не будет завершена завершающая операция завершения: .forEach или .collect или что-то подобное. Как закодировано, даже ничего не нужно выполнять, мертвый код.

0
ответ дан Joop Eggen 18 January 2019 в 12:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: