package fj.data; import java.util.stream.Collector; public final class Collectors { private Collectors() { } public static <A> Collector<A, List.Buffer<A>, List<A>> toList() { return Collector.of( List.Buffer::new, List.Buffer::snoc, (acc1, acc2) -> acc1.append(acc2.toList()), List.Buffer::toList ); } public static <A> Collector<A, List.Buffer<A>, Array<A>> toArray() { return Collector.of( List.Buffer::new, List.Buffer::snoc, (acc1, acc2) -> acc1.append(acc2.toList()), (buf) -> buf.toList().toArray() ); } public static <A> Collector<A, List.Buffer<A>, Stream<A>> toStream() { return Collector.of( List.Buffer::new, List.Buffer::snoc, (acc1, acc2) -> acc1.append(acc2.toList()), (buf) -> buf.toList().toStream() ); } }