2014-05-22 10 views

Odpowiedz

65
map.entrySet().removeIf(entry -> entry.getValue().equals("0")); 

Nie można tego zrobić za pomocą strumieni, ale można to zrobić za pomocą innych nowych metod.

EDIT: jeszcze lepiej:

map.values().removeAll(Collections.singleton("0")); 
+0

doskonały - pozwala mi wykorzystać tę jedną linię zamiast długo zdyszany starej metodzie iteracji. – Dan

+0

Czy to nie usunie z zestawu wpisów, a nie z samej mapy, czy automatycznie synchronizuje? –

+9

Zestaw wpisów jest widokiem; zmiany w nim znajdują odzwierciedlenie na mapie i odwrotnie; nie ma niezależnego istnienia. –

2

myślę, że nie jest to możliwe (lub deffinitelly nie powinno być zrobione) ze względu na chęć strumieni to mieć niekorzystny iterference, jak opisano here

Jeśli myślisz o strumieniach jak twoi funkcjonalne konstrukcje programistyczne wyciekły w Javie, potem myśleć o obiektach, które obsługują je jak ich odpowiedniki funkcjonalne i programowania funkcjonalnego ty działają na niezmiennych obiektów

i za najlepszy sposób radzenia sobie z tym jest użycie filtra tak jak robiłeś