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));

在这里插入图片描述

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<? super T> predicate);条件新的stream对象返回由该流中与给定条件匹配的元素组成的流。
Stream map(Function<? super T, ? extends R> mapper);返回新stream的类型新的stream对象传入要返回新stream中的类型,返回由该类型组成的stream
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值