雪洗中关村

导航

编写一个定制的收集器

 

 

 //编写一个定制的收集器
 List<String> names = Arrays.asList("shekhar", "rahul", "shekhar");
 Multiset<String> set = names.stream().collect(new MultisetCollector<>());
 set.forEach(str -> System.out.println(str + ":" + set.count(str)));



 //编写一个定制的收集器
    public static class MultisetCollector<T> implements Collector<T, Multiset<T>, Multiset<T>> {

        @Override
        public Supplier<Multiset<T>> supplier() {
            return HashMultiset::create;
        }

        @Override
        public BiConsumer<Multiset<T>, T> accumulator() {
            return (set, e) -> set.add(e, 1);
        }

        @Override
        public BinaryOperator<Multiset<T>> combiner() {
            return (set1, set2) -> {
                set1.addAll(set2);
                return set1;
            };
        }

        @Override
        public Function<Multiset<T>, Multiset<T>> finisher() {
            return Function.identity();
        }

        @Override
        public Set<Characteristics> characteristics() {
            return Collections.unmodifiableSet(EnumSet.of(Characteristics.IDENTITY_FINISH));
        }
    }

 

posted on 2020-06-15 15:57  雪洗中关村  阅读(203)  评论(0编辑  收藏  举报