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

目录
相关文章
|
6月前
|
流计算
Flink 多个stream合并聚合
Flink 多个stream合并聚合
101 0
Flink 多个stream合并聚合
|
6月前
|
分布式计算 大数据 Apache
【大数据技术】流数据、流计算、Spark Streaming、DStream的讲解(图文解释 超详细)
【大数据技术】流数据、流计算、Spark Streaming、DStream的讲解(图文解释 超详细)
154 0
|
2月前
|
安全 Java API
Stream流式编程,让代码变优雅
Stream流式编程,让代码变优雅
|
29天前
|
消息中间件 分布式计算 Kafka
大数据-99 Spark 集群 Spark Streaming DStream 文件数据流、Socket、RDD队列流
大数据-99 Spark 集群 Spark Streaming DStream 文件数据流、Socket、RDD队列流
27 0
|
3月前
|
分布式计算 Java 大数据
JUC(8)Stream流式计算
这篇文章介绍了Java中的ForkJoin框架,它在JDK 1.7中引入,用于并行执行任务以提高大数据量处理的效率,特点包括工作窃取和双端队列维护,并提供了CompletableFuture的异步调用示例。
JUC(8)Stream流式计算
|
3月前
|
分布式计算 Apache 数据安全/隐私保护
流计算引擎数据问题之在 Spark Structured Streaming 中水印计算和使用如何解决
流计算引擎数据问题之在 Spark Structured Streaming 中水印计算和使用如何解决
48 1
|
3月前
|
消息中间件 Kafka 数据处理
实时数据流处理:Dask Streams 与 Apache Kafka 集成
【8月更文第29天】在现代数据处理领域,实时数据流处理已经成为不可或缺的一部分。随着物联网设备、社交媒体和其他实时数据源的普及,处理这些高吞吐量的数据流成为了一项挑战。Apache Kafka 作为一种高吞吐量的消息队列服务,被广泛应用于实时数据流处理场景中。Dask Streams 是 Dask 库的一个子模块,它为 Python 开发者提供了一个易于使用的实时数据流处理框架。本文将介绍如何将 Dask Streams 与 Apache Kafka 结合使用,以实现高效的数据流处理。
72 0
|
6月前
|
消息中间件 关系型数据库 MySQL
[flink 实时流基础] 输出算子(Sink)
[flink 实时流基础] 输出算子(Sink)
143 1
|
6月前
|
消息中间件 分布式计算 Kafka
Spark与Kafka的集成与流数据处理
Spark与Kafka的集成与流数据处理
|
6月前
|
消息中间件 存储 监控
Kafka Streams:深度探索实时流处理应用程序
Apache Kafka Streams 是一款强大的实时流处理库,为构建实时数据处理应用提供了灵活且高性能的解决方案。本文将深入探讨 Kafka Streams 的核心概念、详细原理,并提供更加丰富的示例代码,以帮助大家深入理解和应用这一流处理框架。