当前位置: 首页 > news >正文

Java的stream流

Java 8中引入的新特性,stream流通过与Lambda表达式结合,采用函数式编程,简化数组、集合操作,提高效率。

我们操作一个集合,就把他看作一个流,整个流依次执行,(可以类比为一个管道)

开始管道:

中间管道:

 终止管道:

实例:

先创建一个User类:

package One_Thirty;public class User {private int id;private String name;private String sex;private int score;public User(){}public User(int id, String name, String sex, int score){this.id = id;this.name = name;this.sex = sex;this.score = score;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public int getScore() {return score;}public void setScore(int score) {this.score = score;}@Overridepublic String toString() {return "User{" +"id=" + id +", name='" + name + '\'' +", sex='" + sex + '\'' +", score=" + score +'}';}
}

测试类:

package One_Thirty;import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;public class Test {public static void main(String[] args) {List<User> list = new ArrayList<>();list.add(new User(1,"榛果","男",100));list.add(new User(2,"张三","男",90));list.add(new User(3,"大倩","女",80));list.add(new User(4,"大力","男",40));list.add(new User(5,"刻晴","女",60));list.add(new User(6,"松本","男",50));//filter()方法用于过滤,collect()方法用于将过滤后得到的流转换为List集合List<User> collect = list.stream().filter(user -> user.getScore() > 60).collect(Collectors.toList());//遍历collect.forEach(System.out::println);//也可以将两个合并list.stream().filter(user -> user.getScore() > 60).forEach(user -> System.out.println(user));//filter的contains方法,包含,.count()获取数量  输出结果 2  //distinct(),去重long count = list.stream().filter(user -> user.getName().contains("大")).count();System.out.println(count);// map函数的作用就是针对管道流中的每一个数据元素进行转换操作List<User> collect1 = list.stream().map(user -> {user.setId(user.getId() + 10);return user;}).collect(Collectors.toList());collect1.forEach(System.out::println);//由于map的参数e就是返回值,所以可以用peek函数。// peek函数是一种特殊的map函数,当函数没有返回值或者参数就是返回值的时候可以使用peek函数。list.stream().peek(user -> {user.setScore(user.getScore()+1);}).forEach(user -> System.out.println(user));}}

flatMap
map可以对管道流中的数据进行转换操作,但是如果管道中还有管道无法处理。例如:将“hello”,“world”两个字符串组成的集合,元素的每一个字母打印出来。如果不用Stream,常规方法写2层for循环,第一层遍历字符串,并且将字符串拆分成char数组,第二层for循环遍历char数组。而如果用map的话,它只能针对一维数组进行操作,数组里面还有数组,管道里面还有管道,它是处理不了每一个元素的。此时用flatMap

List<String> words = Arrays.asList("hello", "word");words.stream().flatMap(w -> Arrays.stream(w.split(""))) // [h,e,l,l,o,w,o,r,l,d].forEach(System.out::println);

http://www.lryc.cn/news/36798.html

相关文章:

  • Mybatis_相关配置解析和ResultMap
  • Python量化入门:利用中长期RSI寻找趋势拐点,抓大放小,蹲一个大机会!
  • 案例14-代码结构逻辑混乱,页面设计不美观
  • 弱监督参考图像分割:Learning From Box Annotations for Referring Image Segmentation论文阅读笔记
  • Linux进程和任务管理和分析和排查系统故障
  • 【满分】【华为OD机试真题2023 JAVA】最多几个直角三角形
  • PyQt5可视化 7 饼图和柱状图实操案例 ②建表建项目改布局
  • sonarqube指标详解
  • 耳机 喇叭接线分析
  • SpaceNet 建筑物检测
  • 蓝桥杯刷题第六天
  • Linux C++ 多线程高并发服务器实战项目一
  • QML ComboBox简介
  • uniapp使用webview嵌入vue页面及通信
  • 深度学习部署笔记(九): CUDA RunTime API-2.1内存管理
  • Idea+maven+spring-cloud项目搭建系列--11-2 dubbo鉴权日志记录数据统一封装
  • SOLIDWORKS免费培训 SW大型装配体模式课程
  • xxl-job registry fail
  • 【C#进阶】C# 反射
  • 公网NAT网关与VPC NAT网关介绍与实践
  • Windows中UWP、WPF和Windows窗体的区别
  • Flink从入门到精通系列(一)
  • 云原生应用风险介绍
  • 什么是测试用例设计?
  • 数据分析:基于K-近邻(KNN)对Pima人糖尿病预测分析
  • Kettle体系结构及源码解析
  • 大数据 | (二)SSH连接报错Permission denied
  • 前端——6.文本格式化标签和<div>和<span>标签
  • 浅谈Xpath注入漏洞
  • Oracle LogMiner分析归档日志