Próbuję zebrać strumień wyrzucać rzadko używane przedmioty jak w poniższym przykładzie:Collect strumień z działalności grupy, liczenia i filtrowania
import java.util.*;
import java.util.function.Function;
import static java.util.stream.Collectors.*;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.containsInAnyOrder;
import org.junit.Test;
@Test
public void shouldFilterCommonlyUsedWords() {
// given
List<String> allWords = Arrays.asList(
"call", "feel", "call", "very", "call", "very", "feel", "very", "any");
// when
Set<String> commonlyUsed = allWords.stream()
.collect(groupingBy(Function.identity(), counting()))
.entrySet().stream().filter(e -> e.getValue() > 2)
.map(Map.Entry::getKey).collect(toSet());
// then
assertThat(commonlyUsed, containsInAnyOrder("call", "very"));
}
Mam wrażenie, że jest to możliwe do zrobienia jest dużo prostsze - czy mam rację?
Nie, to wygląda na najprostszy sposób na zrobienie tego. –
@LouisWasserman Ale to jest tak brzydka konstrukcja z pośrednią "Mapą" w nim. – ytterrr
Tak? Musi być coś w rodzaju mapy w implementacji, aby wykonać liczenie. Nie da się tego obejść. –