У меня есть карта Java, которую я хотел бы преобразовать и фильтровать. В качестве тривиального примера предположим, что я хочу преобразовать все значения в целые числа, а затем удалить нечетные записи.
Map<String, String> input = new HashMap<>();
input.put("a", "1234");
input.put("b", "2345");
input.put("c", "3456");
input.put("d", "4567");
Map<String, Integer> output = input.entrySet().stream()
.collect(Collectors.toMap(
Map.Entry::getKey,
e -> Integer.parseInt(e.getValue())
))
.entrySet().stream()
.filter(e -> e.getValue() % 2 == 0)
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
System.out.println(output.toString());
Это правильно и дает: {a=1234, c=3456}
Однако я не могу не задаться вопросом, есть ли способ избежать вызова .entrySet().stream()
дважды.
Есть ли способ выполнить операции преобразования и фильтрации и вызвать .collect()
только один раз в конце?