Поскольку operator[]
возвращает ссылку на само значение, поэтому единственный способ указать проблему - это выбросить исключение (и, как правило, STL редко выдает исключения).
Если вы не нравится это поведение, вы можете использовать map::find
вместо этого. Он возвращает итератор вместо значения. Это позволяет ему возвращать специальный итератор, когда значение не найдено (оно возвращает map::end
), но также требует от вас разыменования итератора, чтобы получить значение.
Здесь нет терминальной операции, поэтому этот поток не будет выполнен; таким образом «неиспользованная» ошибка сонара.
У вас также есть побочные эффекты в: 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
Если getTeamMembers является множеством или значения карты уникальны (идентификатор!):
groupDTO.getTeamMembers().addAll(userMap.values());
В противном случае
groupDTO.getTeamMembers().addAll(new HashSet<String>(userMap.values()));
Ошибка заключается в том, что поток является подготовкой бежать; пока не будет завершена завершающая операция завершения: .forEach
или .collect
или что-то подобное. Как закодировано, даже ничего не нужно выполнять, мертвый код.