码迷,mamicode.com
首页 > 编程语言 > 详细

Java8自定义条件让集合分组

时间:2018-11-06 13:27:28      阅读:324      评论:0      收藏:0      [点我收藏+]

标签:定义   private   apply   false   条件   har   ons   指定   this   

    /**
     * 将一个指定类型对象的集合按照自定义的一个操作分组; 每组对应一个List、最终返回结果类型是:List<List<T>>
     *
     * @param <T>
     */
    static class GroupToList<T> implements Collector<T, List<List<T>>, List<List<T>>> {
        /**
         * 集合中对象两两比较,满足自定义的条件(operation结果返回true),便将这两个元素分为一组
         */
        private BiFunction<T, T, Boolean> operation;
        
        
        public GroupToList(BiFunction<T, T, Boolean> operation) {
            super();
            this.operation = operation;
        }

        @Override
        public BiConsumer<List<List<T>>, T> accumulator() {
            return (c, t) -> {
                boolean added = false;
                for (List<T> cc : c) {
                    for (T ccc : cc) {
                        if (operation.apply(ccc, t)){
                            cc.add(t);
                            added = true;
                        }
                        break;
                    }
                    if (added)
                        break;
                    continue;
                }
                if (!added) {
                    ArrayList<T> list = new ArrayList<T>();
                    list.add(t);
                    c.add(list);
                }
            };
        }

        @Override
        public Set<java.util.stream.Collector.Characteristics> characteristics() {
            /*
            Set<java.util.stream.Collector.Characteristics> emptySet = Collections.emptySet();
            */
            return Collections.unmodifiableSet(EnumSet.of(Characteristics.IDENTITY_FINISH));
        }

        @Override
        public BinaryOperator<List<List<T>>> combiner() {
            return (l1,l2) -> {l2.addAll(l1); return l2;};
        }

        @Override
        public Function<List<List<T>>, List<List<T>>> finisher() {
            return p -> p;
        }

        @Override
        public Supplier<List<List<T>>> supplier() {
            return () -> new ArrayList<List<T>>();
        }
    }

 

Java8自定义条件让集合分组

标签:定义   private   apply   false   条件   har   ons   指定   this   

原文地址:https://www.cnblogs.com/mleaf/p/9914336.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!