Sto cercando di raccogliere flusso di buttare via gli oggetti usati raramente come in questo esempio:flusso Raccogliere con le operazioni di raggruppamento, di conteggio e filtraggio
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"));
}
ho la sensazione che sia possibile farlo molto più semplice - ho ragione?
No, sembra il modo più semplice per farlo. –
@LouisWasserman Ma è una costruzione così brutta con la 'Mappa' intermedia in esso. – ytterrr
Quindi? Dovrà essere qualcosa come una mappa nell'implementazione per fare il conteggio. Non c'è modo di aggirare questo. –