1. 程式人生 > >Java8提供Stream常見操作

Java8提供Stream常見操作

Java Stream是1.8提供的一種流式處理集合的工具。Collection介面提供了 stream方法能夠抽象成流,這樣省去了迭代的很多寫法,其用法靈活,下面列舉了一些常用的操作。

	List<String> 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<Long> 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<List<String>> stringListList = Lists.newArrayList();
        for (int i = 0; i < 10; i ++) {
            List<String> list = Lists.newArrayList();
            stringListList.add(list);
            for (int j = 0;j < 10;j ++) {
                list.add(String.valueOf(i * j));
            }
        }
        List<Integer> integerListList = stringListList.stream().flatMap(e -> e.stream().map(Integer::valueOf)).collect(Collectors.toList());
        System.out.println(integerListList);

        /**
         * 5.Distinct排除重複
         */
        List<Integer> 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<Integer> limitList = Stream.of(1,2,3).limit(1).collect(Collectors.toList());
        System.out.println(limitList); // 2,3

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