Als Methode zum Zählen doppelter Elemente gibt es eine Methode, einen Stream zu einer Liste zu machen, die Länge abzurufen und ihn dann in ein Set zu setzen, um die Längen zu vergleichen, aber ich bin nicht sehr glücklich, weil er nicht wie die Stream-API aussieht. Sie können mit einem guten Gefühl schreiben, indem Sie einen Collector erstellen.
static<T> Collector<T,?,Boolean> uniqueElements(){
Set<T> set = new HashSet<>();
return Collectors.reducing(true, set::add, Boolean::logicalAnd);
}
Wenn Sie mit parallelen Streams arbeiten, empfiehlt es sich, eine thread-sichere Sammlung zu verwenden.
Die tatsächliche Verwendung ist wie folgt;
@Test
public void testUniqueElements(){
assertTrue(Stream.of("a","b","c").collect(uniqueElements()));
assertFalse(Stream.of("a","b","b").collect(uniqueElements()));
}
static<T> Collector<T,?,Boolean> uniqueElements(){
Set<T> set = new HashSet<>();
return Collectors.reducing(true, set::add, Boolean::logicalAnd);
}
das ist alles.
Recommended Posts