IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> Stream流常用用法 -> 正文阅读

[Java知识库]Stream流常用用法

概述

Stream流是java8的新特性,结合lambada表达式结合使用可以提升的开发的效率和性能。

作用

1、用于对集合迭代的增强处理

2、可以对集合数组进行更高效的聚合操作,比如分组、过滤等

3、解决了传统开发过程中,jdk对集合操作的不足

模拟数据

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {

    private Integer id;
    private String name;
    private Integer age;
}
//=================================================
ArrayList<User> list = new ArrayList<>();
list.add(new User(1, "小王", 20));
list.add(new User(4, "小龙", 21));
list.add(new User(3, "小汤", 29));
list.add(new User(2, "小吴", 18));

排序(根据id)

List<User> userList = list.stream().sorted(new Comparator<User>() {
  @Override
  public int compare(User o1, User o2) {
    return o1.getId() - o2.getId();
  }
}).collect(Collectors.toList());
userList.forEach(System.out::println);

结果

User(id=1, name=小王, age=20)
User(id=2, name=小吴, age=18)
User(id=3, name=小汤, age=19)
User(id=4, name=小龙, age=21)

Process finished with exit code 0

过滤(找到满足的条件)

//单条件过滤
List<User> userList = list.stream().filter(res -> 	      res.getId().equals(1)).collect(Collectors.toList());

userList.forEach(System.out::println);

//多条件过滤
List<User> userList = list.stream().filter(res -> {
  return res.getName().equals("小王") && res.getAge().equals(20);
}).collect(Collectors.toList());

userList.forEach(System.out::println);

结果

User(id=1, name=小王, age=20)

map(改变集合元素中的信息)

//直接返回修改的属性
List<String> userList = list.stream().map(res -> res.getName().concat("_qiandu")).collect(Collectors.toList());

userList.forEach(System.out::println);
//======================================================
小王_qiandu
小龙_qiandu
小汤_qiandu
小吴_qiandu

另一种

List<User> userList = list.stream().map(res -> {
  res.setName(res.getName() + "_qiandu");
  return res;
}).collect(Collectors.toList());
userList.forEach(System.out::println);

结果

User(id=1, name=小王_qiandu, age=20)
User(id=4, name=小龙_qiandu, age=21)
User(id=3, name=小汤_qiandu, age=19)
User(id=2, name=小吴_qiandu, age=18)

这种在javascript中常用

var arr=[
  {id:1,name:"qqqq"},
  {id:2,name:"qqqq"},
  {id:3,name:"qqqq"}
];

var new_arr = arr.map(datd=>{
  data.age = 1;
  return data;
})

// new_arr
{id:1,name:"qqqq",age:1},
{id:2,name:"qqqq",age:1},
{id:3,name:"qqqq",age:1}

获取总数、遍历、去重

// 获取总数
long count = list.stream().count();
int size = list.size();

//遍历,与js用法相同
list.stream().forEach(res -> {
  System.out.println(res);
});
userList.forEach(System.out::println);

//去重元素,如果集合为对象 需要hashcode相同 equals为true才能成功
list.stream().distinct().collect(Collectors.toList());

求某一属性最大(小)与map(总和)

//求最大
Optional<User> optionalUser = list.stream().max(new Comparator<User>() {
  @Override
  public int compare(User o1, User o2) {
    return o1.getAge() - o2.getAge();
  }
});
//判断是否存在值
if (optionalUser.isPresent()) {
  System.out.println(optionalUser.get());
}
//=====================================================
//求集合某一属性总和
Integer totalAge = list.stream().map(res -> {
  return res.getAge(); //这里返回值,总的返回就是啥
}).reduce(0, (c1, c2) -> c1 + c2);
System.out.println(totalAge);

在这些之中,map是比较难以使用的,他能改变返回值的形态,这些方法可以通过链式编程层层返回。

举个栗子 :用户登录的返回值会返回密码这些敏感数据,我们可以使用map对其处理。

List<User> userList = list.stream().map(user -> {
  user.setPassWord("");
  return user;  //这里返回的是啥,管道流返回的就是啥
}).collect(Collectors.toList());
userList.forEach(System.out::println);

结果

User(id=1, name=小王, passWord=)
User(id=4, name=小龙, passWord=)
User(id=3, name=小汤, passWord=)
User(id=2, name=小吴, passWord=)
  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-10-16 19:30:54  更:2021-10-16 19:33:12 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 22:45:35-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码