Collector.of のサンプル(1)

java.util.stream.Collector#of の簡単なサンプル

Collectors.toSet() で済む話ではあるのだが、
static <T,A,R> Collector<T,A,R> of(Supplier<A> supplier,
BiConsumer<A,T> accumulator,
BinaryOperator<A> combiner,
Function<A,R> finisher,
Collector.Characteristics... characteristics)

をしっかりと理解するのには、そこそこ良いサンプル

stream の集計として HashSet に格納して全て同一(equalsメソッド)要素であるかをチェック

public static <T> Collector<T, Set<T>, Boolean> isSingle(){
   return Collector.of(HashSet::new, Set::add,
      (a1, a2)->{
         a1.addAll(a2);
         return a1;
      },
      a->a.size()==1
   );
}

stream の集計として HashSet に格納してそのサイズを求める。

static <T> Collector<T, Set<T>, Integer> hashsetsize(){
   return Collector.of(HashSet::new, Set::add,
      (a1, a2)->{
         a1.addAll(a2);
         return a1;
      },
      a->a.size()
   );
}

いずれも、Collectors.toSet()の結果で事足りるのだが、Stream#collect の戻り値として欲しい場合は
良いかもしれない。