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

Java高级-stream流

stream流

  • 1.介绍
  • 2.将List转成Set
  • 3.将List转成Map
  • 4.计算求和reduce
  • 5.查找最大值max和最小值min
  • 6.Match匹配
  • 7.过滤器 filter
  • 8.分页limit 跳过skip
  • 9.数据排序 sorted

1.介绍

stream流可以非常方便与精简的形式遍历集合,实现过滤、排序等功能

2.将List转成Set

stream.collect(Collectors.toSet());

public class Test01 {public static void main(String[] args) {ArrayList<UserEntity> userEntities = new ArrayList<>();userEntities.add(new UserEntity("张三",16));userEntities.add(new UserEntity("李四", 51));userEntities.add(new UserEntity("王五", 73));userEntities.add(new UserEntity("赵六", 12));userEntities.add(new UserEntity("赵六", 12));// 创建stream有两种方式// 1.串行流// 2.并行流// 并行流 比 串行流 效率要高Stream<UserEntity> stream = userEntities.stream();// 转换成set集合Set<UserEntity> userEntitySet = stream.collect(Collectors.toSet());userEntitySet.forEach(userEntity -> {System.out.println(userEntity);});}
}

3.将List转成Map

需要指定谁作为key,谁作为value
stream.collect(Collectors.toMap());

public class Test02 {public static void main(String[] args) {ArrayList<UserEntity> userEntities = new ArrayList<>();userEntities.add(new UserEntity("张三",16));userEntities.add(new UserEntity("李四", 51));userEntities.add(new UserEntity("王五", 73));userEntities.add(new UserEntity("赵六", 12));// list集合并没有key// 指定userName作为key,user对象作为valueStream<UserEntity> userEntityStream = userEntities.stream();/*** new Function<UserEntity(List集合中的类型), String(Map中的Key)>()*/Map<String, UserEntity> collect = userEntityStream.collect(Collectors.toMap(new Function<UserEntity, String>() {@Overridepublic String apply(UserEntity userEntity) {// 设置key的值return userEntity.getUserName();}}, new Function<UserEntity, UserEntity>() {@Overridepublic UserEntity apply(UserEntity userEntity) {// 设置value的值return userEntity;}}));collect.forEach(new BiConsumer() {@Overridepublic void accept(Object key, Object value) {System.out.println(key + ": " + value);}});}
}

4.计算求和reduce

public class Test03 {public static void main(String[] args) {Stream<Integer> integerStream = Stream.of(10, 89, 204, 56);Optional<Integer> reduce = integerStream.reduce(new BinaryOperator<Integer>() {@Overridepublic Integer apply(Integer integer, Integer integer2) {return integer + integer2;}});System.out.println(reduce.get());System.out.println("================================================");// 计算每个user的年龄的总数ArrayList<UserEntity> userEntities = new ArrayList<>();userEntities.add(new UserEntity("张三",16));userEntities.add(new UserEntity("李四", 51));userEntities.add(new UserEntity("王五", 73));userEntities.add(new UserEntity("赵六", 12));userEntities.add(new UserEntity("赵六", 12));Stream<UserEntity> userEntityStream = userEntities.stream();Optional<UserEntity> sum = userEntityStream.reduce(new BinaryOperator<UserEntity>() {@Overridepublic UserEntity apply(UserEntity u1, UserEntity u2) {return new UserEntity("sum", u1.getAge() + u2.getAge());}});System.out.println(sum.get().getAge());}
}

5.查找最大值max和最小值min

public class Test04 {public static void main(String[] args) {ArrayList<UserEntity> userEntities = new ArrayList<>();userEntities.add(new UserEntity("张三",16));userEntities.add(new UserEntity("李四", 51));userEntities.add(new UserEntity("王五", 73));userEntities.add(new UserEntity("赵六", 12));userEntities.add(new UserEntity("赵六", 12));// 最大值Stream<UserEntity> userEntityStream1 = userEntities.stream();Optional<UserEntity> max = userEntityStream1.max((o1, o2) -> o1.getAge() - o2.getAge());System.out.println("max = " + max.get());// 最小值Stream<UserEntity> userEntityStream2 = userEntities.stream();Optional<UserEntity> min = userEntityStream2.min((o1, o2) -> o1.getAge() - o2.getAge());System.out.println("min = " + min.get());}
}

6.Match匹配

anyMatch:判断条件里,任意一个元素成功,返回true
AllMatch:判断条件里,所有的都是成功,返回true
noneMatch跟allMatch相反,判断条件里的元素,所有的都不是,返回true

public class Test05 {public static void main(String[] args) {ArrayList<UserEntity> userEntities = new ArrayList<>();userEntities.add(new UserEntity("zhangsan",16));userEntities.add(new UserEntity("lisi", 51));userEntities.add(new UserEntity("wangwu", 73));userEntities.add(new UserEntity("zhaoliu", 12));userEntities.add(new UserEntity("zhaoliu", 12));Stream<UserEntity> userEntityStream = userEntities.stream();boolean b = userEntityStream.noneMatch(new Predicate<UserEntity>() {@Overridepublic boolean test(UserEntity userEntity) {return "zhangsan".equals(userEntity.getUserName());}});System.out.println("b = " + b);}
}

7.过滤器 filter

public class Test06 {public static void main(String[] args) {ArrayList<UserEntity> userEntities = new ArrayList<>();userEntities.add(new UserEntity("zhangsan",26));userEntities.add(new UserEntity("lisi", 51));userEntities.add(new UserEntity("wangwu", 73));userEntities.add(new UserEntity("zhaoliu", 12));userEntities.add(new UserEntity("zhaoliu", 63));Stream<UserEntity> userEntityStream = userEntities.stream();userEntityStream.filter(new Predicate<UserEntity>() {@Overridepublic boolean test(UserEntity userEntity) {return "zhaoliu".equals(userEntity.getUserName()) && userEntity.getAge() > 2;}}).forEach(userEntity -> System.out.println(userEntity));}
}

8.分页limit 跳过skip

public class Test07 {public static void main(String[] args) {ArrayList<UserEntity> userEntities = new ArrayList<>();userEntities.add(new UserEntity("zhangsan",26));userEntities.add(new UserEntity("lisi", 51));userEntities.add(new UserEntity("wangwu", 73));userEntities.add(new UserEntity("zhaoliu", 12));userEntities.add(new UserEntity("zhaoliu", 63));// 只查询前5条Stream<UserEntity> userEntityStream1 = userEntities.stream();userEntityStream1.limit(3).forEach(userEntity -> System.out.println(userEntity));System.out.println("====================");// 查询 第2条-4条Stream<UserEntity> userEntityStream2 = userEntities.stream();userEntityStream2.skip(2).limit(2).forEach(userEntity -> System.out.println(userEntity));}
}

9.数据排序 sorted

public class Test08 {public static void main(String[] args) {ArrayList<UserEntity> userEntities = new ArrayList<>();userEntities.add(new UserEntity("zhangsan",26));userEntities.add(new UserEntity("lisi", 51));userEntities.add(new UserEntity("wangwu", 73));userEntities.add(new UserEntity("zhaoliu", 12));userEntities.add(new UserEntity("zhaoliu", 63));Stream<UserEntity> userEntityStream = userEntities.stream();userEntityStream.sorted(new Comparator<UserEntity>() {@Overridepublic int compare(UserEntity o1, UserEntity o2) {return o2.getAge() - o1.getAge();}}).forEach(userEntity -> System.out.println(userEntity));}
}
http://www.lryc.cn/news/176017.html

相关文章:

  • Python环境搭建
  • JOSEF约瑟 SSJ-41B SSJ-41A 静态时间继电器 延时范围0.02-9.99s
  • 文件MultipartFile上传同时,接收复杂参数
  • Nginx 获取当前机器IP- Protocol- Port
  • Unity丨自动巡航丨自动寻路丨NPC丨
  • Mysql002:(库和表)操作SQL语句
  • 排水管网液位监测,排水管网液位监测方法
  • ansible的个人笔记使用记录
  • OpenAI官方吴达恩《ChatGPT Prompt Engineering 提示词工程师》(7)聊天机器人 / ChatBot
  • 公司监控员工电脑用什么软件?应该怎么选?
  • 探索创意的新辅助,AI与作家的完美合作
  • 计算机类软件方向适合参加的比赛
  • win11、win10使用python代码打开和关闭wifi热点的正确方法
  • spark的数据扩展
  • 前后端分离-图书价格排序案例、后端返回图片地址显示在组件上(打印图片地址)
  • Text-to-SQL小白入门(七)PanGu-Coder2论文——RRTF
  • C语言中常见的面试题
  • 协议-SSL协议-基础概念01-SSL位置-协议套件-握手和加密过程-对比ipsec
  • M1/M2芯片Parallels Desktop 19安装使用教程(超详细)
  • 外包干了3个月,技术退步明显。。。。。
  • 顺风车软件搭建流程:数字化出行与社会共享的创新
  • 2023-09-26 LeetCode每日一题(递枕头)
  • excell导入十万数据慢该如何解决
  • Python异步编程常见问题与解决
  • 77. 组合
  • vue项目开发环境工具-node
  • Python | 为FastAPI后端服务添加API Key认证(分别基于路径传参和header两种方式且swagger文档友好支持)
  • nodeJs+jwt实现小程序tonken鉴权
  • 更新andriod studio版本,项目编译报could not find org.junit.jupiter:junit-jupiter
  • 【慕伏白教程】 Linux 深度学习服务器配置指北