Stream API

在java中Stream是一个接口

流的迭代

创建流

一.直接创建

import java.util.stream.Stream;

Stream<String> stream = Stream.of("苹果", "哈密瓜", "香蕉", "西瓜", "火龙果");

二.由数组转化

String[] fruitArray = new String[] {"苹果", "哈密瓜", "香蕉", "西瓜", "火龙果"};
Stream<String> stream = Stream.of(fruitArray);

三.由集合转化

List<String> fruits = new ArrayList<>();
fruits.add("苹果");
fruits.add("哈密瓜");
fruits.add("香蕉");
fruits.add("西瓜");
fruits.add("火龙果");
Stream<String> stream = fruits.stream();

流的迭代也是由foreach()方法但和集合中的foreach不一样(遍历数据是一样的)

流数据过滤

filter()方法

功能为对流中的数据进行过滤

在这里插入图片描述
方法参数是一个Lambda表达式,箭头后是条件语句,判断数据需要符合的条件也就是使用Lambda表达式告诉过滤器,需要那些符合条件的数据

pupils.stream()
    .filter(pupil -> pupil.getAverageScore() >= 80 && pupil.getViolationCount() < 1)
    .forEach(pupil -> {System.out.println(pupil.getName());});

这里的Lambda表达式略有不同,因为是条件语句所以表达式放在()而不是{}中

流数据映射

流中的map()方法就是映射,作用是用新的元素替换掉原来相同位置的元素,相当于每个对象都经历过依次转换

在这里插入图片描述

map()方法的参数是一个Lambda表达式,在语句块中对流中的每个数据进行计算处理,最后return返回的对象就是转换后的对象

在这里插入图片描述
优点:

映射后的对象类型可以与原始的不一致提供了灵活性和扩展性

流数据排序

用Stream API实现学生学号排序:

List<Student> students = new ArrayList<Student>();
students.add(new Student(111, "bbbb", "london"));
students.add(new Student(131, "aaaa", "nyc"));
students.add(new Student(121, "cccc", "jaipur"));

students.stream()
    // 实现升序排序
    .sorted((student1, student2) -> {
        return student1.getRollNo() - student2.getRollNo();
    })
    .forEach(System.out::println);

这里的student1指的是后一个元素,student2是前一个元素

流数据的摘取

对一组数字找出最大的前3个数字

numbers.stream()
    .sorted((n1, n2) -> n2 - n1)
    .limit(3)
    .forEach(System.out::println);

limit()方法的作用就是返回流前n个元素,n不能为负数

不是摘取任意位置,只能是流开头

流的设计思想

数据流的操作过程可以看做一个管道,管道由多个节点组成,每个节点完成一个操作

数据流输入这个管道,按照顺序经过各个节点
在这里插入图片描述
Stream的显著特点是:编程的重点不再是对象的运用而是数据的计算

Stream的特征为:函数式风格,弱化了面向对象的严格,完整的语法重心变为通过函数完成数据计算
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

-irony-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值