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

Java核心语法-Stream详解 - 努力-

一、Stream流简介

Stream也叫Stream流,是Jdk8开始新增的一套API (java.util.stream.),可以用于操作集合或者数组的数据。
优势: Stream流大量的结合了Lambda的语法风格来编程,提供了一种更加强大,更加简单的方式操作集合或者数组中的数据,代码更简洁,可读性更好。

使用stream流:

 public static void main(String[] args) {// Stream流的使用List<String> list = new ArrayList<>();list.add("张无忌");list.add("周芷若");list.add("赵敏");list.add("张强");list.add("张三丰");//  1、拿出姓张的放到新集合中去。
//        List<String> newList = new ArrayList<>();
//        for (String s : list) {
//            if(s.startsWith("张") && s.length() == 3) {
//                newList.add(s);
//            }
//        }
//        System.out.println(newList);// 2、使用Stream流List<String> newList = list.stream().filter(s -> s.startsWith("张") && s.length() == 3).collect(Collectors.toList());System.out.println(newList);}

运行结果:

在这里插入图片描述

二、使用Stream流

使用Stream流步骤:
1.获取Stream流,
2.调用方法,
3.获取结果。

1.获取Stream流:

  public static void main(String[] args) {// 获取Stream流。// 1、获取集合的Stream流:  default Stream<E> stream()Collection<String> list = new ArrayList<>();Collections.addAll(list, "张无忌", "周芷若","赵敏","张强","张三丰");Stream<String> listS = list.stream();System.out.println(listS.count());//打印数量;// 2、获取Map集合的Stream流。Map<String,Integer> map = new HashMap<>();// 1)、获取键流。Stream<String> keyS = map.keySet().stream();// 2)、获取值流。Stream<Integer> valueS = map.values().stream();// 3)、获取键值对流。Stream<Map.Entry<String, Integer>> entryStream = map.entrySet().stream();// 3、获取数组的StreamString[] names = {"赵敏", "王菲", "小昭"};Stream<String> stream1 = Arrays.stream(names);Stream<String> stream2 = Stream.of(names);}

2.Stream流常见的方法:

   public static void main(String[] args) {// Stream流的常见方法。List<String> list = new ArrayList<>();Collections.addAll(list, "张无忌", "周芷若","赵敏","张强","张三丰");// 1、过滤方法list.stream().filter(s ->  s.startsWith("张") ).filter(s ->s.length() == 3).forEach(s -> System.out.println(s));}
   public static void main(String[] args) {// tream流的常见方法。List<String> list = new ArrayList<>();Collections.addAll(list, "张无忌", "周芷若","赵敏","张强","张三丰");// 1、过滤方法list.stream().filter(s ->  s.startsWith("张") ).forEach(s -> System.out.println(s));// 2、准备一个集合,排序。List<Movie> movies = new ArrayList<>();movies.add(new Movie("摔跤吧,爸爸", 9.5, "阿米尔汗"));movies.add(new Movie("三傻宝莱坞", 8.5, "阿米尔汗2"));movies.add(new Movie("三傻宝莱坞", 8.5, "阿米尔汗2"));movies.add(new Movie("阿甘正传", 7.5, "汤姆汉克斯"));// 集合中如果存储对象,方式一:对象类可以实现Comparable接口,指定比较规则// sorted方法就可以按照规则进行排序,否则报错!movies.stream().sorted().forEach(s -> System.out.println(s));System.out.println("-----------------------------------------------01");movies.stream().sorted((m1, m2) -> Double.compare(m2.getScore(), m1.getScore())).forEach(System.out::println);// 3、limit取前几个System.out.println("-----------------------------------------------limit ");movies.stream().sorted((m1, m2) -> Double.compare(m2.getScore(), m1.getScore())).limit(2).forEach(System.out::println);// 4、跳过前几个skipSystem.out.println("-----------------------------------------------skip ");movies.stream().sorted((m1, m2) -> Double.compare(m2.getScore(), m1.getScore())).skip(1).forEach(System.out::println);// 5、distinct去重复System.out.println("----------------------------------------------- distinct");// 去重复:需要重写对象类的hashCode和equals方法movies.stream().sorted((m1, m2) -> Double.compare(m2.getScore(), m1.getScore())).distinct().forEach(System.out::println);// 6、map加工方法:把流上的数据加工成新数据。System.out.println("-----------------------------------------------map加工");movies.stream().map(m -> {m.setScore(m.getScore() + 2);return m;}).forEach(System.out::println);// 7、合并流。// 把两个流接起来 。Stream<String> s1 = Stream.of("张三", "楚留香", "西门牛牛");Stream<String> s2 = Stream.of("李四", "石景山");Stream<String> allStream = Stream.concat(s1, s2);long count = allStream.count(); // count:统计个数System.out.println(count);}

运行如图:
在这里插入图片描述

  1. Stream流的常见终结方法
 public static void main(String[] args) {// Stream流的常见终结方法。List<Movie> movies = new ArrayList<>();movies.add(new Movie("摔跤吧,爸爸", 9.5, "阿米尔汗0"));movies.add(new Movie("三傻宝莱坞", 8.5, "阿米尔汗1"));movies.add(new Movie("三傻宝莱坞", 8.5, "阿米尔汗2"));movies.add(new Movie("阿甘正传", 7.5, "汤姆汉克斯"));// 1、forEachmovies.stream().forEach(System.out::println);System.out.println("-----------------------------------------------01");// 2、countlong count = movies.stream().skip(2).count();System.out.println(count);// 3、取最大值Movie movie = movies.stream().max((m1, m2) -> Double.compare(m1.getScore(), m2.getScore())).get();System.out.println(movie);Movie movie2 = movies.stream().min((m1, m2) -> Double.compare(m1.getScore(), m2.getScore())).get();System.out.println(movie2);// 4、收集Stream流:把流中的数据恢复到集合或者数组中去。List<String> list = new ArrayList<>();list.add("张无忌");list.add("周芷若");list.add("赵敏");list.add("张强");list.add("张三丰");list.add("张三丰");// 收集到List集合List<String> names = list.stream().filter(s -> s.startsWith("张")).collect(Collectors.toList());System.out.println(names);names.add("张麻子");System.out.println(names);// 收集到Set集合Set<String> names2 = list.stream().filter(s -> s.startsWith("张")).collect(Collectors.toSet());System.out.println(names2);names2.add("张麻子");System.out.println(names2);// 收集到数组Object[] names3 = list.stream().filter(s -> s.length() == 3).toArray();System.out.println(Arrays.toString(names3));// 拓展
//        String[] names4 = list.stream().filter(s -> s.length() == 3).toArray(String[]::new);
//        System.out.println(Arrays.toString(names4));// 收到到Map集合。List<Movie> movies1 = new ArrayList<>();movies1.add(new Movie("摔跤吧,爸爸", 9.5, "阿米尔汗"));movies1.add(new Movie("三傻宝莱坞", 8.5, "阿米尔汗2"));movies1.add(new Movie("三傻宝莱坞", 8.5, "阿米尔汗2"));movies1.add(new Movie("阿甘正传", 7.5, "汤姆汉克斯"));Map<String, Double> map = movies1.stream().distinct().collect(Collectors.toMap(m -> m.getName(), m -> m.getScore()));System.out.println(map);}
http://www.jsqmd.com/news/433142/

相关文章:

  • 01-路由
  • 2026年3月珠海复式楼装修设计公司推荐:挑空层设计与利用率提升 - 品牌鉴赏师
  • 从“黑盒”到“全景”:在.NET中拥抱OpenTelemetry与SigNoz的可观测工具
  • TS+VUE3
  • 深入解析Qt事件处理机制:从原理到实战,构建响应式GUI应用
  • LeetCode 378 有序矩阵中第 K 小的元素:python3 题解
  • LeetCode 88 合并两个有序数组:python3 题解
  • Python核心语法-文件操作、os模块和常用标注库 - 努力-
  • 零基础联通云部署实战:三维编辑器上云全记录
  • Last Meeting Theory(最后相遇理论)and Soulmate(灵魂伴侣)
  • 基于ssm的学生健康管理系统w4apa20f(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
  • 拆解百度智能运营平台:AI应用架构师能借鉴的4个架构设计理念
  • 从大模型推理边界看职业壁垒:为什么说接入云端大模型API只是人机协作的第一步?
  • YOLO11 改进 - SPPF模块 替代SPPF, Mona多认知视觉适配器(CVPR 2025):打破全参数微调的性能枷锁:即插即用的提点神器
  • 基于ssm家电售后服务管理系统d9x66u24(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
  • 解析大数据领域数据增强的应用场景
  • S001 【模板】从前缀函数到KMP应用 字符串匹配 字符串周期
  • YOLO11 改进 - Mamba _ 集成Mamba-YOLO(AAAI 2025),Mamba-YOLO11-L 替换骨干,破解全局依赖建模难题,实现高效实时检测
  • YOLO11 改进 - Mamba _ 集成Mamba-YOLO(AAAI 2025),Mamba-YOLO11-T 替换骨干,破解全局依赖建模难题,实现高效实时检测
  • 私有部署、安全可控:BeeWorks一体化视频会议解决方案赋能政企高效协同
  • YOLO11 改进 - Mamba _ 集成Mamba-YOLO(AAAI 2025),Mamba-YOLO11-B 替换骨干,破解全局依赖建模难题,实现高效实时检测
  • AWS中东数据中心遭不明物体撞击引发大规模服务中断
  • python核心语法-运算符-类型转换 - 努力-
  • 提示工程远程团队敏捷协作:5个工具让沟通更高效!
  • 问题解决:Oracle VirtualBox创建的虚拟主机不能ping通windows host主机虚拟网卡的ip
  • Qt 捕获应用程序未知异常的方法
  • 异常和自定义错误码使用时机
  • 解读大数据领域结构化数据的性能优化策略
  • YOLO11 改进 - C2PSA _ C2PSA融合Mask Attention掩码注意力,可学习掩码矩阵破解低分辨率特征提取难题 _ 2025 预印
  • 计算资源与AI模型性能提升的关系探讨