package com.insightfullogic.java8.examples.chapter5.mutable_custom; import java.util.HashSet; import java.util.Set; import java.util.function.BiConsumer; import java.util.function.BinaryOperator; import java.util.function.Function; import java.util.function.Supplier; import java.util.stream.Collector; public class AlbumSalesCollector implements Collector<AlbumSale, AlbumSalesReport, AlbumSalesReport> { private static final Set<Characteristics> characteristics = new HashSet<>(); static { characteristics.add(Characteristics.UNORDERED); characteristics.add(Characteristics.IDENTITY_FINISH); } @Override public Supplier<AlbumSalesReport> supplier() { return AlbumSalesReport::new; } @Override public BiConsumer<AlbumSalesReport, AlbumSale> accumulator() { return (report, album) -> report.acknowledgeSale(album); } @Override public BinaryOperator<AlbumSalesReport> combiner() { return (left, right) -> left.merge(right); } @Override public Function<AlbumSalesReport, AlbumSalesReport> finisher() { return Function.identity(); } @Override public Set<Characteristics> characteristics() { return characteristics; } }