Java8新特性-Stream API

Java8新特性-Stream API

1. 到底是什么呢Stream?

  从翻译过来的中文理解可以是‘流’,但不是我们理解的数据流,例如 InputStream,OutputStream,等输入输出流。
  Stream是数据渠道,用于操作数据源(集合、数组等)所生成的元素序列。“集合讲的是数据,流讲的是计算!”
注意:
- ①Stream 自己不会存储元素。
- ②Stream 不会改变源对象。相反,他们会返回一个持有结果的新Stream。
- ③Stream 操作是延迟执行的。这意味着他们会等到需要结果的时候才执行。

2. Stram 的操作三个步骤

  • 创建 Stream
    一个数据源(如:集合、数组),获取一个流;例如
public static List<Student> getData() {
        Random random = new Random();
        List<Student> studentList = new ArrayList<Student>() {
            {
                for (int i = 0; i < 100; i++) {
                    add(new Student("student" + i, random.nextInt(50) + 50));
                }
            }
        };
        return studentList;
    }
  • 中间操作
    一个中间操作链,对数据源的数据进行处理
    如下面代码中 stream->filter->sorted->map都是对数据源的中间操作
  • 终止操作(终端操作)
    一个终止操作,执行中间操作链,并产生结果
    如下代码中 stream-> xxx -> collect这是处理返回结果
List<Student> studentList = getData();
        studentList.forEach(student -> 
        System.out.println(student.getName() + "\t" + student.getScore()));
        List<String> studentNameList = studentList.stream()
        .filter(student -> student.getScore() >= 90)
                .sorted(Comparator.comparing(Student::getScore).reversed())
                .map(Student::getName)
                .collect(Collectors.toList());
        System.out.println("过滤后的数据:");
        studentNameList.forEach(studentName -> System.out.println(studentName));

Java8新特性-Stream API_第1张图片

3.创建stream

  • Java8 中的Collection 接口被扩展,提供了两个获取流的方法:
default Stream<E> stream() : 返回一个顺序流 
default Stream<E> parallelStream() : 返回一个并行流
  • 由数组创建流
static <T> Stream<T> stream(T[] array): 返回一个流
  • 由值创建流
    可以使用静态方法Stream.of(), 通过显示值创建一个流。它可以接收任意数量的参数。
public static<T> Stream<T> of(T... values) : 返回一个流

由函数创建流:创建无限流

//迭代
public static<T> Stream<T> iterate(final T seed, final UnaryOperator<T> f)
//生成
public static<T> Stream<T> generate(Supplier<T> s) :

4. Stream 的中间操作

多个中间操作可以连接起来形成一个流水线除非流水线上触发终止操作否则中间操作不会执行任何的处理
而在终止操作时一次性全部处理,称为“惰性求值”。

函数 参数 返回值 释义
Stream filter(Predicate predicate); 条件 新的stream对象 返回由该流中与给定条件匹配的元素组成的流。
Stream map(Function mapper); 返回新stream的类型 新的stream对象 传入要返回新stream中的类型,返回由该类型组成的stream

你可能感兴趣的:(Java学习)