Java8提供Stream常见操作

Java Stream是1.8提供的一种流式处理集合的工具。Collection接口提供了 stream方法能够抽象成流,这样省去了迭代的很多写法,其用法灵活,下面列举了一些常用的操作。

	List stringList = Lists.newArrayList();
        for (int i = 0; i < 10; i++) {
            stringList.add(String.valueOf(i));
        }
        stringList.stream().skip(2).collect(Collectors.toList());
        // 不改变原对象
        System.out.println(stringList);

        // Stream 使用接口
        /**
         * 1. filter
         * 返回Predicate定义过滤的元素
         */
        // 过滤偶数
        stringList = stringList.stream().filter(e -> Integer.valueOf(e) % 2 == 0).collect(Collectors.toList());
        System.out.println(stringList); // [0, 2, 4, 6, 8]

        /**
         * 2.map
         * 定义函数返回新的类型的流
         */
        List longList = stringList.stream().map(Long::valueOf).collect(Collectors.toList());
        System.out.println(longList);// [0, 2, 4, 6, 8]

        /**
         * 3.mapToInt
         * 转换成Int类型的流, 可以做一些运算操作,其他double与float类似
         */
        // 求和
        Integer count = stringList.stream().mapToInt(e -> Integer.valueOf(e)).sum();
        System.out.println(count);

        /**
         * 4.flapMap
         *  二维数组,每个数组调用Function
         */
        List> stringListList = Lists.newArrayList();
        for (int i = 0; i < 10; i ++) {
            List list = Lists.newArrayList();
            stringListList.add(list);
            for (int j = 0;j < 10;j ++) {
                list.add(String.valueOf(i * j));
            }
        }
        List integerListList = stringListList.stream().flatMap(e -> e.stream().map(Integer::valueOf)).collect(Collectors.toList());
        System.out.println(integerListList);

        /**
         * 5.Distinct排除重复
         */
        List distinctList = integerListList.stream().distinct().collect(Collectors.toList());
        System.out.println(distinctList); // 去除重复的

        /**
         * sort按指定方式排序
         */
        distinctList.sort((e1, e2) -> e1 < e2 ? 1 : -1);
        System.out.println(distinctList); // 递减排列

        /**
         * peek 可以使用它去处理每个元素
         * 想比较map没返回值
         */
        Stream.of("a", "b", "c").peek(e -> System.out.println(e)).collect(Collectors.toList());

        /**
         * limit 只取前指定个数
         */
        List limitList = Stream.of(1,2,3).limit(1).collect(Collectors.toList());
        System.out.println(limitList); // 2,3

        /**
         * skip 指定个数,返回
         */
        List skipList = Stream.of("a", "b", "c").skip(1).collect(Collectors.toList());
        System.out.println(skipList); // b,c

你可能感兴趣的:(编程语言)