| import java.util.Arrays; |
| import java.util.List; |
| import java.util.Map; |
| import java.util.Optional; |
| import java.util.function.BinaryOperator; |
| import java.util.function.Function; |
| import java.util.stream.Collector; |
| |
| import static java.util.stream.Collectors.*; |
| |
| class Stuff { |
| public enum Type { A } |
| private final int value; |
| private final Type type; |
| public Stuff(int value, Type type) { |
| this.value = value; |
| this.type = type; |
| } |
| public int getValue() { |
| return value; |
| } |
| public Type getType() { |
| return type; |
| } |
| } |
| |
| class FakeErrors { |
| { |
| |
| Collector<Stuff, ?, Map<Stuff.Type, Optional<Stuff>>> collector = |
| groupingBy(Stuff::getType, |
| reducing((d1, d2) -> { |
| boolean b = d1.getValue() > d2.getValue(); |
| return d1; |
| })); |
| } |
| |
| public static <T> Collector<T, ?, Optional<Stuff>> reducing(BinaryOperator<T> op) { |
| return null; |
| } |
| |
| public static <T, K, A, D> |
| Collector<T, ?, Map<K, D>> groupingBy(Function<? super T, ? extends K> classifier, |
| Collector<? super T, A, D> downstream) { |
| return null; |
| } |
| } |
| |
| class FakeErrorsComplete { |
| public static List<Stuff> elems(){ |
| return Arrays.asList( |
| new Stuff(800, Stuff.Type.A)); |
| } |
| |
| public static void main(String ... args){ |
| |
| Map<Stuff.Type, Optional<Stuff>> bar = |
| elems() |
| .stream() |
| .collect(groupingBy(Stuff::getType, |
| reducing((d1, d2) -> d1.getValue() > d2.getValue() ? d1 : d2))); |
| |
| System.out.println(bar); |
| |
| Map<Stuff.Type, Stuff> baz = |
| elems() |
| .stream() |
| .collect(groupingBy(Stuff::getType, |
| collectingAndThen(reducing((Stuff d1, Stuff d2) -> d1.getValue() > d2.getValue() ? d1 : d2), |
| Optional::get))); |
| |
| System.out.println(baz); |
| } |
| } |