Stream流式计算

简介: Stream流式计算

什么是Stream流式计算

其实就是把存储的数据,进行数据筛选的操作 它是JDK1.8的新特性(Stream流式计算 关于时间的API 函数式接口 lambda表达式)

所有的流都在java.util.stream下

常用API:

stream  把容器转换为stream对象

default Stream<E> stream() {
return StreamSupport.stream(spliterator(), false);
}
  1. filter 进行数据过滤
Stream<T> filter(Predicate<? super T> predicate);
  1. map 进行数据转换 大小写 替换
<R> Stream<R> map(Function<? super T, ? extends R> mapper);
  1. sorted  排序 默认正序 可以通过换比较位调整为倒叙
Stream<T> sorted(Comparator<? super T> comparator);
  1. limit 分页 参数是几就取几条数据
Stream<T> limit(long maxSize);
  1. count 返回流的数据总和
long count();

代码进行数据筛选

package com.wyh.stream;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
 * @program: JUC
 * @description: 用户信息
 * @author: 魏一鹤
 * @createDate: 2022-03-06 16:12
 **/
@Data
@AllArgsConstructor
@NoArgsConstructor
//有参构造 无参构造 get set toString方法
public class User {
private int id;
private String name;
private int age;
}
package com.wyh.stream;
/**
 * @program: JUC
 * @description: Stream流式计算
 * @author: 魏一鹤
 * @createDate: 2022-03-06 16:13
 **/
import java.util.Arrays;
import java.util.List;
/**
 * 题目要求 只能用一行代码实现
 * 现在有五个用户 请按照以下要求进行筛选
 * 1 ID必须是偶数
 * 2 年龄必须大于23岁
 * 3 用户名字母转为大写
 * 4 用户名字母正序/倒序排序
 * 5 只输出一个用户
**/
public class StreamTest {
public static void main(String[] args){
//用户信息
        User u1=new User(1,"a",21);
        User u2=new User(2,"b",22);
        User u3=new User(3,"c",23);
        User u4=new User(4,"d",24);
        User u5=new User(5,"e",25);
//把用户信息全部存放在一个容器中
        //集合就是存储
        List<User> users= Arrays.asList(u1,u2,u3,u4,u5);
//计算交给Stream流
        //把list转换为流  .stream()会把容器转换为stream对象 使用filter方法进行条件过滤
        // 1 ID必须是偶数
        //User(id=2, name=b, age=22)
        //User(id=4, name=d, age=24)
        System.out.println("ID必须是偶数");
         users.stream()
                 .filter((user)->{return user.getId()%2==0;})
                 .forEach(System.out::println);
//2 年龄必须大于23岁
        System.out.println("年龄必须大于23岁");
        users.stream()
//filer进行条件过滤
                .filter((user)->{return user.getAge()>23;})
                .forEach(System.out::println);
//3用户名字母转为大写
        System.out.println("用户名字母转为大写");
//map进行数据转换
        users.stream()
                .map((user)->{return user.getName().toUpperCase();})
                .forEach(System.out ::println);
//4 用户名字母正序排序
        System.out.println("用户名字母正序排序");
//sorted默认正序排序
        users.stream()
                .map((user)->{return user.getName().toUpperCase();})
                .sorted((uu1,uu2)->{return uu1.compareTo(uu2);})
                .forEach(System.out ::println);
//4 用户名字母倒叙排序
        System.out.println("用户名字母倒叙排序");
        users.stream()
                .map((user)->{return user.getName().toUpperCase();})
                .sorted((uu1,uu2)->{return uu2.compareTo(uu1);})
                .forEach(System.out ::println);
//5 只输出一个用户
        System.out.println("只输出一个用户");
//limit分页 参数为输出几个  limit(long maxSize);
        users.stream().limit(1).forEach(System.out ::println);
//最终各种条件合并成一行代码
        //lambda表达式 函数式接口 链式编程  Stream流式计算
        System.out.println("-------------------end---------------------");
        users.stream()
                .filter((user)->{return user.getId()%2==0;}) //筛选 id为偶数
                .filter((user)->{return user.getAge()>23;}) //筛选 年龄大于23
                .map((user)->{return user.getName().toUpperCase();})//数据转化 字母大写
                .sorted((uu1,uu2)->{return uu1.compareTo(uu2);})//排序 正序
                .limit(1) //分页 1条数据
                .forEach(System.out ::println);
//流的数据总数
long count = users.stream()
                    .count();
            System.out.println(count); //5
    }
}

ID必须是偶数

User(id=2, name=b, age=22)

User(id=4, name=d, age=24)

年龄必须大于23岁

User(id=4, name=d, age=24)

User(id=5, name=e, age=25)

用户名字母转为大写

A

B

C

D

E

用户名字母正序排序

A

B

C

D

E

用户名字母倒叙排序

E

D

C

B

A

只输出一个用户

User(id=1, name=a, age=21)

-------------------end---------------------

D

流的数据总数:5

目录
相关文章
|
JSON Java 数据格式
Java使用Hutool工具包生成二维码、验证码、随机数
Java使用Hutool工具包生成二维码、验证码、随机数
3292 0
Java使用Hutool工具包生成二维码、验证码、随机数
|
11月前
|
Kubernetes 监控 Cloud Native
Kubernetes集群的高可用性与伸缩性实践
Kubernetes集群的高可用性与伸缩性实践
215 1
|
关系型数据库 MySQL
mysql: error while loading shared libraries: libncurses.so.5: cannot open shared object file
mysql: error while loading shared libraries: libncurses.so.5: cannot open shared object file
871 0
|
12月前
|
机器学习/深度学习 Python
深度学习笔记(六):如何运用梯度下降法来解决线性回归问题
这篇文章介绍了如何使用梯度下降法解决线性回归问题,包括梯度下降法的原理、线性回归的基本概念和具体的Python代码实现。
639 0
|
算法 数据库
CAS核心思想、底层实现
CAS核心思想、底层实现
342 0
|
SQL Oracle 关系型数据库
NVL() 函数:SQL中的空值处理利器
【8月更文挑战第31天】
1673 0
|
12月前
|
监控 安全 Linux
CentOS7下安装配置ntp服务的方法教程
通过以上步骤,您不仅能在CentOS 7系统中成功部署NTP服务,还能确保其配置合理、运行稳定,为系统时间的精确性提供保障。欲了解更多高级配置或遇到特定问题,提供了丰富的服务器管理和优化资源,可作为进一步学习和求助的平台。
1806 1
报错org.springframework.jdbc.UncategorizedSQLException: Error attempting to get column ‘xxx‘ from resu
报错org.springframework.jdbc.UncategorizedSQLException: Error attempting to get column ‘xxx‘ from resu
报错org.springframework.jdbc.UncategorizedSQLException: Error attempting to get column ‘xxx‘ from resu
|
安全 机器人
Nature子刊:人机融合即将成真!纳米机器人杀死癌细胞,肿瘤生长抑制70%
【7月更文挑战第9天】DNA纳米机器人成功抑制小鼠体内癌细胞生长70%,展示出人机融合治疗癌症的前景。卡罗林斯卡学院科学家利用DNA构造的纳米机器人,识别并选择性攻击癌细胞,其pH敏感设计确保只在肿瘤微环境中激活,减少对健康细胞的影响。尽管需进一步研究优化设计及进行临床试验,这一创新为癌症疗法带来新希望。[链接](https://www.nature.com/articles/s41565-024-01676-4)**
456 1
|
JavaScript
VUE组件:什么是props?如何在父组件向子组件传递数据?
VUE组件:什么是props?如何在父组件向子组件传递数据?
445 2