当前位置: 移动技术网 > IT编程>开发语言>Java > Java8自定义条件让集合分组

Java8自定义条件让集合分组

2018年11月06日  | 移动技术网IT编程  | 我要评论

诺卡氏菌病,行尸走肉第六季第三集,军武大本营

    /**
     * 将一个指定类型对象的集合按照自定义的一个操作分组; 每组对应一个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>>();
        }
    }

 

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网