stream详解

2023-11-14

Java中的Stream流

公司中用了很多Stream流,经常用来筛选出PO类型的List中想要的数据,所以还是比较常用的。

Stream是Java8的新成员,允许以声明式方式处理数据集合

  • 代码简洁:函数式编程写出的代码简洁且意图明确,使用stream接口让你从此告别for循环。

  • 多核友好:Java函数式编程使得编写并行程序从未如此简单,你需要的全部就是调用一下方法。

  1. 把集合转换为流stream

  2. 操作stream流 stream流在管道中经过中间操作(intermediate operation)的处理,最后由最终操作(terminal operation)得到前面处理的结果

有两种操作符

  1. 中间操作符
  2. 终止操作符
中间操作符
流方法 含义 示例
filter 用于通过设置的条件过滤出元素 List strings = Arrays.asList(“abc”, “”, “bc”, “efg”, “abcd”,“”, “jkl”);List filtered = strings.stream().filter(string -> !string.isEmpty()).collect(Collectors.toList());
distinct 返回一个元素各异(根据流所生成元素的hashCode和equals方法实现)的流。 List numbers = Arrays.asList(1, 2, 1, 3, 3, 2, 4);numbers.stream().filter(i -> i % 2 == 0).distinct().forEach(System.out::println);
limit 会返回一个不超过给定长度的流。 List strings = Arrays.asList(“abc”, “abc”, “bc”, “efg”, “abcd”,“jkl”, “jkl”);List limited = strings.stream().limit(3).collect(Collectors.toList());
skip 返回一个扔掉了前n个元素的流。 List strings = Arrays.asList(“abc”, “abc”, “bc”, “efg”, “abcd”,“jkl”, “jkl”);List skiped = strings.stream().skip(3).collect(Collectors.toList());
map 接受一个函数作为参数。这个函数会被应用到每个元素上,并将其映射成一个新的元素(使用映射一词,是因为它和转换类似,但其中的细微差别在于它是“创建一个新版本”而不是去“修改”)。 List strings = Arrays.asList(“abc”, “abc”, “bc”, “efg”, “abcd”,“jkl”, “jkl”);List mapped = strings.stream().map(str->str+“-itcast”).collect(Collectors.toList());
flatMap 使用flatMap方法的效果是,各个数组并不是分别映射成一个流,而是映射成流的内容。所有使用map(Arrays::stream)时生成的单个流都被合并起来,即扁平化为一个流。 List strings = Arrays.asList(“abc”, “abc”, “bc”, “efg”, “abcd”,“jkl”, “jkl”);Stream flatMap = strings.stream().flatMap(Java8StreamTest::getCharacterByString);
sorted 返回排序后的流 List strings1 = Arrays.asList(“abc”, “abd”, “aba”, “efg”, “abcd”,“jkl”, “jkl”);List sorted1 = strings1.stream().sorted().collect(Collectors.toList());
/**
 * 功能描述:根据条件过滤集合数据  filter
 * @return : void
 */
@Test
public void filter(){
   
    List<String> strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl");
    List<String> filtered = strings.stream().filter(string -> !string.isEmpty()).collect(Collectors.toList());
    out.println(filtered);
}
/**
 * 功能描述:去除集合中重复数据  distinct
 * @return : void
 */
@Test
public void distinct(){
   
    List<String> strings = Arrays.asList("abc", "abc", "bc", "efg", "abcd","jkl", "jkl");
    List<String> distincted = strings.stream().distinct().collect(Collectors.toList());
    out.println(distincted);
}
/**
 * 功能描述:指定获取集合前x条数据,重新构造一个新的集合  limit
 * @return : void
 */
@Test
public void limit(){
   
    List<String> strings = Arrays.asList("abc", "abc", "bc", "efg", "abcd","jkl", "jkl");
    List<String> limited = strings.stream().limit(3).collect(Collectors.toList());
    out.println(limited);
}
/**
 * 功能描述:排除集合前x条数据,把后面的数据重新构造一个新的集合  skip
 * @return : void
 */
@Test
    public void skip(){
   
    List<String> strings = Arrays.asList("abc", "abc", "bc", "efg", "abcd","jkl", "jkl");
    List<String> skiped = strings.stream().skip(3).collect(Collectors.toList());
    out.println(skiped);
}
/**
 * 功能描述:对集合中所有元素统一处理  map
 * @return : void
 */
@
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

stream详解 的相关文章

随机推荐

  • 解决宝塔面板打开不了登录界面问题或xshell界面显示的宝塔登录地址是空的的问题

    问题描述 某天重开电脑之后 在浏览器打开宝塔面板页面时 提示请使用正确的入口登录面版 如下图 解决方案 正常情况下把查看面板入口的命令给复制到xshell里面 他就会返回给你登录地址 用户名 密码 然后你复制地址重新登录就可以了 如果你在x
  • Android完全退出应用程序 ,【Android面试题】

    activity finish activityStack remove activity activity null 获得当前栈顶Activity public Activity currentActivity Activity acti
  • Vue自定义指令的使用详解

    自定义指令 vue官方提供了v text v for v model v if等常用的指令 还允许开发者自定义指令 在使用自定义指令前 须在自定义名称前加v 名称 私有自定义指令
  • android audio/linux alsa音频-硬件

    接着以前的文章继续写音频方面的分析 因为学得快忘得也快 如果不加以总结和记录 很快自己也不记得了 要完全了解一个音频器件 如ES8396 wm8998 首先得了解它的硬件原理 一般在嵌入式领域 音频的编解码芯片主要有两种 1 在单片机应用方
  • I/O接口

    I O接口 结构和作用 数据缓冲寄存器DBR 暂存即将输入输出的数据 主机和外设的速度匹配 状态 控制寄存器 命令字 CPU对设备发出的具体命令 状态字 设备的状态信息 供CPU检查 串 并转换机构 数据格式的转换 I O控制逻辑 根据命令
  • 网络QoS解决方案

    网络QoS解决方案 在网络带宽不足时 对网络流量做区别服务 优先传输那些重要的 要求网络延迟小的 如果丢弃会导致更大业务代价的数据 并对不同应用的数据做合理的带宽分配与控制 如果一定需要丢弃一些数据 则丢弃那些代价比较低的 这就是网络 Qo
  • pnpm install出现:ERR_PNPM_PEER_DEP_ISSUES Unmet peer dependencies

    使用 pnpm install 安装项目依赖时出现 ERR PNPM PEER DEP ISSUES Unmet peer dependencies 在 pnpm github issues 中找到相关解决方案 一 前言 完整日志 ERR
  • Git修改IP重新定位的方法

    进入已clone项目的 git文件夹 打开config文件 打开config 如图显示 修改url中的IP为192 168 6 102 然后保存 在项目上右击选择属性 R 然后选择Git 即可看到当前项目的跟踪远端网址 转载于 https
  • js vue上传文件判断文件格式 GIF JPG PNG

    根据文件识别头信息获取图片文件的类型 JPG 文件头标识 FF D8 文件尾标识 FF D9 PNG 文件头标识 8 bytes 89 50 4E 47 0D 0A 1A 0A GIF 文件头标识 6 bytes 47 49 46 38 3
  • 计算机二级试题及分值分布,计算机二级各部分分值分布

    计算机二级考试分选择题和操作题两大类 其中选择题10题 每题2分 一共20分 操作题分字处理题 电子表格题 演示文稿题三大类 其中字处理题30分 电子表格题30分 演示文稿题20分 共计80分 计算机二级各科目考试题型及分值 二级 MS O
  • java垃圾回收机制概述以及优缺点

    Java中的垃圾回收机制是自动内存管理的一部分 它负责在程序运行时自动回收不再使用的内存对象 以便为程序提供可用的内存空间 基于所谓的 垃圾收集器 它是Java虚拟机 JVM 的一部分 以下是Java垃圾回收机制的主要特点 1 对象生命周期
  • 教室管理系统(相关技术和设备:stm32、w5500、mqtt)

    背景 某学校对新建的实验楼有门禁管理需求 因此我们项目组借助KOB门锁 某宝销量较高的电吸锁和电插锁品牌 搭建了前端 微信小程序和网页 服务器 java服务器和mqtt服务器 单片机 基于stm32 用于控制电插锁 实现了一套完整的门禁管理
  • 关于RuoYi-Vue和ruoyi-vue-pro的基本使用理解

    文章目录 概要 前后端分离架构 技术栈 技术细节 小结 概要 提示 这里是本文概要 RuoYi Vue和ruoyi vue pro两个Web开源项目都是基于当下主流技术栈的前后端分离版本 后端采用SpringBoot多模块架构 前端使用Vu
  • 秋叶一键重装系统连接服务器失败,秋叶一键重装系统win7系统安装和使用DAEMONToolsLite的方法【图文教程】...

    DAEMON Tools Lite是一款虚拟光驱工具 装完不需启动即可用 是一个非常先进的模拟备份以及合并保护盘的软件 但是有部分win7秋叶系统用户还不知道要怎么安装和使用DAEMON Tools Lite 针对这个情况 小编这就给大家分
  • 保研日记v

    目录 个人情况 夏令营情况 预推免情况 希望能对学弟学妹们能有一定的参考价值 同样也是为了本科前三年画上一个句号 有问题可以直接留言哈 认识我的话可以直接小窗私戳我 即便困惑你的是很小的问题也希望大家能够勇敢的开口问 因为走了很多弯路 也在
  • 我优化了进度条,页面性能竟提高了70%

    前言 大家好 我是零一 最近我准备在组里进行代码串讲 所以我梳理了下项目之前的业务代码 在梳理的过程中 我看到了有个进度条组件写的非常好 这又想起我刚开始学前端时写的进度条的代码 跟这个比起来真的差距太大了 大部分的初学者应该都想不到 而且
  • 程序员常用的命令

    写在前面 你们好 我是小庄 很高兴能和你们一起学习常用命令 如果您对Java感兴趣的话可关注我的动态 写博文是一种习惯 在这过程中能够梳理和巩固知识 常用的Linux命令 cd 改变目录 cd 回退到上一级目录 直接cd进入默认目录 pwd
  • Vulkan_片元着色器特效5(泛光Bloom)

    本部分主要结合上一部分的Vulkan 片元着色器特效4 高动态范围HDR 来综合展示HDR 泛光场景 主要参照 LearnOpenGL中的Bloom章节 一 基本原理 Bloom使我们能够注意到一个明亮的物体真的有种明亮的感觉 泛光可以极大
  • ctfshow web入门——web2

    无法查看源代码 点击右键确实不行 直接ctrl u查看即可 但这个也可以用另一种方法查看网页源代码 即在网页url前面 view source
  • stream详解

    Java中的Stream流 公司中用了很多Stream流 经常用来筛选出PO类型的List中想要的数据 所以还是比较常用的 Stream是Java8的新成员 允许以声明式方式处理数据集合 代码简洁 函数式编程写出的代码简洁且意图明确 使用s