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

目录
相关文章
|
5月前
|
流计算
Flink 多个stream合并聚合
Flink 多个stream合并聚合
43 0
Flink 多个stream合并聚合
|
5月前
|
分布式计算 大数据 Apache
【大数据技术】流数据、流计算、Spark Streaming、DStream的讲解(图文解释 超详细)
【大数据技术】流数据、流计算、Spark Streaming、DStream的讲解(图文解释 超详细)
65 0
|
21天前
|
存储 Java API
Stream流
Stream流
32 1
|
7天前
|
消息中间件 关系型数据库 MySQL
[flink 实时流基础] 输出算子(Sink)
[flink 实时流基础] 输出算子(Sink)
|
7天前
|
负载均衡 算法 大数据
[flink 实时流基础] 转换算子
[flink 实时流基础] 转换算子
超强的Stream流了解一下
超强的Stream流了解一下
|
9月前
|
存储 Java
Stream流式编程
Stream流式编程
104 0
|
10月前
|
Java 数据处理
常用Stream流
常用Stream流
103 0
|
10月前
|
存储 Java
探索Stream流的实际应用场景
在Java 8中,引入了Stream流这一强大的新特性,它不仅可以让我们更加优雅地处理集合数据,还可以提高代码的简洁性和性能。本文将深入探讨Stream流的实际应用场景,从而帮助读者更好地理解和应用这一功能。
376 0
|
传感器 存储 SQL
Flink多流转换(Flink Stream Unoin、Flink Stream Connect、Flink Stream Window Join)
Flink多流转换(Flink Stream Unoin、Flink Stream Connect、Flink Stream Window Join)
Flink多流转换(Flink Stream Unoin、Flink Stream Connect、Flink Stream Window Join)