java8新特性——stream筆記

stream對象

  1. Stream<T>java

  2. IntStream數組

  3. LongStream函數

  4. DoubleStreamui

建立

經常使用的三種方式:code

  • 使用list對象:對象

    • list.stream() − 爲集合建立串行流。
    • list.parallelStream() − 爲集合建立並行流。
  • Arrays: Arrays.stream( T[] array) − 爲數組建立流(能夠建立IntStream,LongStream,DoubleStrem)。blog

  • Stream: Stream.of(T... values) − 爲一組同類型的數據建立流。接口

demo:ip

/**
     * 集合接口有兩個方法來生成流:
     * 按照流的類型可分爲串行流和並行流
     * stream() − 爲集合建立串行流。
     * parallelStream() − 爲集合建立並行流。
     */
    private static Stream<String> createStreamFromCollection() {
        List<String> list = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl");
        return list.stream();
    }
    /**
     *  使用Stream.of()建立流
     * @return
     */
    private static Stream<String> createStreamFromValues() {
        return Stream.of("hello", "alex", "wangwenjun", "world", "stream");
    }
    /**
     * 使用Arrays.stream()建立流
     * 能夠生成IntStream,LongStream,DoubleStream
     * @return
     */
    private static Stream<String> createStreamFromArrays() {
        String[] strings = {"hello", "alex", "wangwenjun", "world", "stream"};
        return Arrays.stream(strings);
    }

操做

filter : 過濾, 過濾掉不符合條件的數據。rem

map :轉換流類型, 返回一個流,該流包含將給定函數應用於該流元素的結果。

​ 好比一個Stream<Map> 類型的流組裝後成爲Stream<String>的流

limit : 分頁。

collect : 將流收集成一個數組。

List<Dish> menu = Arrays.asList(
                new Dish("pork", false, 800, "肉類"),
                new Dish("beef", false, 700, "肉類"),
                new Dish("chicken", false, 400, "肉類"),
                new Dish("french fries", true, 530, "魚肉類"),
                new Dish("rice", true, 350, "魚肉類"),
                new Dish("season fruit", true, 120, "魚肉類"),
                new Dish("pizza", true, 550, "魚肉類"),
                new Dish("prawns", false, 300, "其餘"),
                new Dish("salmon", false, 450, "其餘"));


        //建立菜單流
        List<Map<String,Integer>> result = menu.stream().filter(d -> {
            // 過濾出卡路里大於300的值
            System.out.println("filtering->" + d.getName());
            return d.getCalories() > 300;
        })
                .map(d -> {
                    Map<String, Integer> map = new HashMap<>();
                    map.put(d.getName(),d.getCalories());
                    return map;
                })
                .limit(3)
                .collect(toList());

        System.out.println(result);

其餘操做

List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 6, 7, 7, 1);
        List<Integer> result = list.stream().filter(i -> i % 2 == 0).collect(toList());
        System.out.println("i -> i % 2 的值  :  "+result);
        result = list.stream().distinct().collect(toList());
        System.out.println("去重   :   "+result);
        result = list.stream().skip(2).collect(toList());//跳過前兩個數
        System.out.println("跳過   : "+result);
        result = list.stream().limit(4).collect(toList());//取前4個值
        System.out.println("分頁   : "+result);
        System.out.println("循環方式一  : ");
        list.forEach(i -> System.out.println(i));
        System.out.println("循環方式二  : ");
        list.forEach((Integer i) -> System.out.println(i));
        System.out.println("循環方式三  : ");
        list.forEach(System.out::println);

        for (int i : list) {
            System.out.println(i);
        }

**** 碼字不易若是對你有幫助請給個關注****

**** 愛技術愛生活 QQ羣: 894109590****

相關文章
相關標籤/搜索