Если вы собираетесь использовать потоки, вам следует избегать побочных эффектов . Функциональное программирование - все о чистых операциях, где выход зависит только от входа, а функции не имеют побочных эффектов. Другими словами, создайте новую карту вместо изменения существующей.
Если вы сделаете это, вы можете просто выбросить частично заполненную карту и пересчитать все с нуля. Вызов String.length()
является дешевым, и на самом деле не стоит усилий, чтобы выяснить, какие значения равны нулю, а какие нет. Пересчитайте все длины.
Map<String, Integer> newMap = nameLength.keySet().stream()
.collect(Collectors.toMap(
name -> name,
name -> name.length()
));
С другой стороны, если вы просто хотите исправить свои текущие потоки на карте, на самом деле вы ничего не купите. Я бы просто изменил его на месте без использования потоков.
for (Map.Entry<String, Integer> entry: nameLength.entrySet()) {
if (entry.getValue() == null) {
entry.setValue(entry.getKey().length());
}
}
Или, как обсуждалось выше, вы могли бы упростить ситуацию, заменив все длины:
nameLength.replaceAll((name, __) -> name.length());
(__
обозначает переменную, которая не используется, и поэтому не получает значащего имени .)