Mam mapę Java, którą chcę przekształcić i przefiltrować. Jako trywialny przykład załóżmy, że chcę przekonwertować wszystkie wartości na liczby całkowite, a następnie usunąć nieparzyste wpisy.Przekształcanie i filtrowanie mapy Java ze strumieniami
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());
ta jest poprawna, a rentowności: {a=1234, c=3456}
Niestety, nie mogę pomóc, ale zastanawiam się, czy istnieje sposób, aby uniknąć wywoływania .entrySet().stream()
dwukrotnie.
Czy jest sposób, w jaki mogę wykonać operacje transformacji i filtrowania i zadzwonić pod numer .collect()
tylko raz na końcu?
Nie sądzę, że to możliwe. Na podstawie javadoc "Strumień powinien być obsługiwany (wywołując operację pośrednią lub strumień końcowy) tylko jeden raz, co wyklucza na przykład" rozwidlone "strumienie, w których to samo źródło podaje dwa lub więcej potoków lub wiele przejazdów tego samego Strumień. Implementacja strumienia może rzucić IllegalStateException, jeśli wykryje, że strumień jest ponownie wykorzystywany. " – kosa
@Namban To nie jest pytanie. – immibis