En tant que méthode de comptage des éléments en double, il existe une méthode pour créer une liste Stream, obtenir la longueur, puis la placer dans un ensemble pour comparer les longueurs, mais je ne suis pas heureux car cela ne ressemble pas à l'API Stream. Vous pouvez écrire avec un bon feeling en créant un Collector.
static<T> Collector<T,?,Boolean> uniqueElements(){
Set<T> set = new HashSet<>();
return Collectors.reducing(true, set::add, Boolean::logicalAnd);
}
Lorsque vous traitez avec des flux parallèles, il est judicieux d'utiliser une collection Thread safe.
L'utilisation réelle est la suivante;
@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);
}
c'est tout.
Recommended Posts