java stream filter map collector使用

    @Test
    public void demo1(){
        ArrayList<Integer> list = new ArrayList<>();
        for (int i = 0; i < 10; i++){
            list.add(i);
        }

        /**
         * map
         * collector
         * filter
         * stream
         */

        //stream顺序处理,底层用来fork/Join框架
        System.out.println("stream顺序处理");
        Stream<Integer> stream = list.stream();
        long s = System.currentTimeMillis();
//        stream.forEach(elem -> System.out.println(elem));
//        System.out.println(stream);
        long e = System.currentTimeMillis();
        long spendTime = (e - s)/1000;
        //并行流式处理
        System.out.println("并行流式处理");
        long ps = System.currentTimeMillis();
        Stream<Integer> integerStream = list.parallelStream();
        System.out.println("总结:");
//        integerStream.forEach(elem -> System.out.println(elem));
        long pe = System.currentTimeMillis();
        long spendTime2 = (pe - ps)/1000;
        System.out.println(spendTime + " s" + "\t" + spendTime2 + "s");
        /**
         * map功能:
         *  1.从原始的list中取值后,通过stream返回一个新的集合
         */
        List<String> streamListMap = list.stream().map(n -> String.valueOf(n * 2)).collect(Collectors.toList());
        System.out.println("map 方法的用途是将旧数据转换后变为新数据,是一种 1:1 的映射,每个输入元素按照规则转换成另一个元素");
        System.out.println(streamListMap);
        /**
         * collector收集器:
         * 将流中的元素放入到一个List集合当中
         */
        System.out.println("将流中的元素放入到一个List集合当中");
        List<String> collectList = streamListMap.stream().collect(Collectors.toList());
        System.out.println(collectList);
        //filter
        //过滤奇数
        List<Integer> collectFilter = list.stream().filter(elem -> {
            return elem % 2 == 0;
        }).collect(Collectors.toList());
        System.out.println(collectFilter);
        List<Integer> collectFilter2 = list.stream().filter(elem -> elem % 2 == 0).collect(Collectors.toList());
        System.out.println(collectFilter2);
        //stram map filter collector
        //distinct去重
        ArrayList<Integer> intList = new ArrayList<Integer>(){
            {
                add(1);
                add(1);
                add(2);
            }
        };
        System.out.println("distinct去重");
        Stream<Integer> distinct = list.stream().distinct();
        System.out.println(distinct.collect(Collectors.toList()));
        //sort排序
        ArrayList<People> peopleObjects = new ArrayList<People>(){
            {
                add(new People("wangwu", 30));
                add(new People("zhangsan", 10));
                add(new People("lisi", 20));
            }
        };
        System.out.println("sort排序");
        //正序
        System.out.println("正序排序");
        Stream<People> sortedList = peopleObjects.stream().sorted(Comparator.comparing(People::getAge));
        System.out.println(sortedList.collect(Collectors.toList()));
        //倒序
        System.out.println("降序");
        Stream<People> reversedSortList = peopleObjects.stream().sorted(Comparator.comparing(People::getAge).reversed());
        System.out.println(reversedSortList.collect(Collectors.toList()));
        //peek 对对象的进行操作
        System.out.println("peek 对对象的进行操作");
        Stream<People> peekStream = peopleObjects.stream().peek(elem -> elem.setAge(elem.getAge() * 2));
        System.out.println(peekStream.collect(Collectors.toList()));
        //截断limit
        System.out.println("limit取出前三个");
        Stream<Integer> limitStream = list.stream().limit(3);
        System.out.println(limitStream.collect(Collectors.toList()));
        //跳过skip
        System.out.println("skip跳过前五个");
        Stream<Integer> skipStream = list.stream().skip(5);
        System.out.println(skipStream.collect(Collectors.toList()));
    }

    class People{
        String name;
        int age;

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public int getAge() {
            return age;
        }

        public void setAge(int age) {
            this.age = age;
        }

        public People(String name, int age) {
            this.name = name;
            this.age = age;
        }

        @Override
        public String toString() {
            return "PeekObject{" +
                    "name='" + name + '\'' +
                    ", age=" + age +
                    '}';
        }
    }

控制台打印:

stream顺序处理
并行流式处理
总结:
0 s	0s
map 方法的用途是将旧数据转换后变为新数据,是一种 1:1 的映射,每个输入元素按照规则转换成另一个元素
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
将流中的元素放入到一个List集合当中
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
[0, 2, 4, 6, 8]
[0, 2, 4, 6, 8]
distinct去重
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
sort排序
正序排序
[PeekObject{name='zhangsan', age=10}, PeekObject{name='lisi', age=20}, PeekObject{name='wangwu', age=30}]
降序
[PeekObject{name='wangwu', age=30}, PeekObject{name='lisi', age=20}, PeekObject{name='zhangsan', age=10}]
peek 对对象的进行操作
[PeekObject{name='wangwu', age=60}, PeekObject{name='zhangsan', age=20}, PeekObject{name='lisi', age=40}]
limit取出前三个
[0, 1, 2]
skip跳过前五个
[5, 6, 7, 8, 9]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值