zoukankan      html  css  js  c++  java
  • 深入理解Java 8 Stream

    Java 8中新增了Stream,主要是lambda表达式的应用,其链式调用简洁,用于高效表达集合操作。

    先对Stream的使用做了解,参照blog

    (1) 生成Stream的方式

    主要有以下几种

    1. 数组 - Array

    String[] arr = {"gh","shf","awuygwi"};
    Stream.of(arr).forEach(System.out::println);
    Arrays.stream(arr).forEach(System.out::println);

    2. 集合 - Collection

    List<String> list = Arrays.asList(arr);
    list.stream().forEach(System.out::println);
    Stream.of(list).forEach(System.out::println);

    3. 文件io

    String filePath = "xxx";
    try (BufferedReader reader = new BufferedReader(new FileReader(filePath))) {
        reader.lines().forEach(System.out::println);
    } catch (IOException e) {
        e.printStackTrace();
    }

    (2) Stream的操作分Intermediate, Terminal和short-circuiting

    1. Intermediate操作

    构成链式调用的部分,做过滤/映射等。该类型操作不会立即对元素作用,直到Terminal操作开始起作用。

    常见的比如,filter(), map()/flatMap(), sorted(), limit()

    2. Terminal操作

    Terminal操作生成最终结果。一个Stream对应一个Terminal操作。

    常见的比如,forEach(), collect(), min(), max(), count(), findFirst()

    3. short-circuiting操作

    short-circuiting常用于操作无限Stream,比如allMatch(), findFirst(), limit()

    以下是使用Stream的一个例子,

    filter,mapToInt 为Intermediate操作;sum为Terminal操作
    int sum = widgets.stream().filter(w -> w.getColor() == RED).mapToInt(w -> w.getWeight()).sum();

    (3) Stream典型用法

     参照blog,实践中...

  • 相关阅读:
    蓝桥杯省赛经验
    阅读笔记四
    阅读笔记二
    阅读笔记一
    动态规划——Maximum Sum of 3 Non-Overlapping Subarrays
    动态规划——Remove Boxes
    动态规划——Dungeon Game
    动态规划——Freedom Trail
    动态规划——Frog Jump
    《软件需求十步走》阅读笔记一
  • 原文地址:https://www.cnblogs.com/hello-yz/p/10190390.html
Copyright © 2011-2022 走看看