Java 8 Stream方法

autoware 激光-相机联合标定 autoware进行激光-相机联合标定 ~~~ 刚开始进行激光-相机联合标定的时候,出现了不少问题,在此记录一下整体标定流程,以防忘记。在此,特别感谢佳明师弟,在录制数据集时提供的帮助。 ~~~ 0.系统配置: Ubuntu18.04系统 ROS Melodic opencv 3.2.0 vlp-16 一.安装autoware 这部分网上教程挺多的,但我在编译的过程中仍存在不少bug,唉~_~。 二.安装calibration_camera_lidar,从a... 阅读详情
concat

concat方法将两个Stream连接在一起,合成一个Stream。若两个输入的Stream都时排序的,则新Stream也是排序的;若输入的Stream中任何一个是并行的,则新的Stream也是并行的;若关闭新的Stream时,原两个输入的Stream都将执行关闭处理。

示例:

Stream.concat(Stream.of(1, 2, 3), Stream.of(4, 5))
       .forEach(integer -> System.out.print(integer + "  "));
// 打印结果
// 1  2  3  4  5  
distinct

distinct方法以达到去除掉原Stream中重复的元素,生成的新Stream中没有没有重复的元素。

Stream.of(1,2,3,1,2,3)
        .distinct()
        .forEach(System.out::println); // 打印结果:1,2,3

创建了一个Stream(命名为A),其含有重复的1,2,3等六个元素,而实际上打印结果只有“1,2,3”等3个元素。因为A经过distinct去掉了重复的元素,生成了新的Stream(命名为B),而B
中只有“1,2,3”这三个元素,所以也就呈现了刚才所说的打印结果。

filter

filter方法对原Stream按照指定条件过滤,在新建的Stream中,只包含满足条件的元素,将不满足条件的元素过滤掉。

Stream.of(1, 2, 3, 4, 5)
        .filter(item -> item > 3)
        .forEach(System.out::println);// 打印结果:4,5

创建了一个含有1,2,3,4,5等5个整型元素的Stream,filter中设定的过滤条件为元素值大于3,否则将其过滤。而实际的结果为4,5。

==filter传入的Lambda表达式必须是Predicate实例,参数可以为任意类型,而其返回值必须是boolean类型==。

map

map方法将对于Stream中包含的元素使用给定的转换函数进行转换操作,新生成的Stream只包含转换生成的元素。为了提高处理效率,官方已封装好了,三种变形:mapToDouble,mapToInt,mapToLong。其实很好理解,如果想将原Stream中的数据类型,转换为double,int或者是long是可以调用相对应的方法。

示例:

Stream.of("a", "b", "hello")
        .map(item-> item.toUpperCase())
        .forEach(System.out::println);
        // 打印结果
        // A, B, HELLO

传给map中Lambda表达式,接受了String类型的参数,返回值也是String类型,在转换行数中,将字母全部改为大写

==map传入的Lambda表达式必须是Function实例,参数可以为任意类型,而其返回值也是任性类型,javac会根据实际情景自行推断。==

flatMap

flatMap方法与map方法类似,都是将原Stream中的每一个元素通过转换函数转换,不同的是,该换转函数的对象是一个Stream,也不会再创建一个新的Stream,而是将原Stream的元素取代为转换的Stream。如果转换函数生产的Stream为null,应由空Stream取代。flatMap有三个对于原始类型的变种方法,分别是:flatMapToInt,flatMapToLong和flatMapToDouble。

示例:

Stream.of(1, 2, 3)
    .flatMap(integer -> Stream.of(integer * 10))
    .forEach(System.out::println);
    // 打印结果
    // 10,20,30

传给flatMap中的表达式接受了一个Integer类型的参数,通过转换函数,将原元素乘以10后,生成一个只有该元素的流,该流取代原流中的元素。

==flatMap传入的Lambda表达式必须是Function实例,参数可以为任意类型,而其返回值类型必须是一个Stream。==

sorted

sorted方法将对原Stream进行排序,返回一个有序列的新Stream。sorterd有两种变体sorted(),sorted(Comparator),前者将默认使用Object.equals(Object)进行排序,而后者接受一个自定义排序规则函数(Comparator),可按照意愿排序。

示例:

Stream.of(5, 4, 3, 2, 1)
        .sorted() 
        .forEach(System.out::println;
        // 打印结果
        // 1,2,3,4,5

Stream.of(1, 2, 3, 4, 5)
        .sorted(Comparator.reverseOrder())
        .forEach(System.out::println;
        // 打印结果
        // 5, 4, 3, 2, 1
//list排序        
list.stream().sorted(Comparator.comparing(Student::getAge)) 
Terminal(终点操作)
collect

Java 8系列之Stream的强大工具Collector

Java 8系列之重构和定制收集器

count

count方法将返回Stream中元素的个数。

示例:

long count = Stream.of(1, 2, 3, 4, 5)
        .count();
System.out.println("count:" + count);// 打印结果:count:5
forEach

forEach方法前面已经用了好多次,其用于遍历Stream中的所元素,避免了使用for循环,让代码更简洁,逻辑更清晰。

示例:

Stream.of(5, 4, 3, 2, 1)
    .sorted()
    .forEach(System.out::println);
    // 打印结果
    // 1,2,3,4,5
max

max方法根据指定的Comparator,返回一个Optional,该Optional中的value值就是Stream中最大的元素。至于Optional是啥,后续再做介绍吧。

原Stream根据比较器Comparator,进行排序(升序或者是降序),所谓的最大值就是从新进行排序的,max就是取重新排序后的最后一个值,而min取排序后的第一个值。

示例:

Optional<Integer> max = Stream.of(1, 2, 3, 4, 5)
        .max((o1, o2) -> o2 - o1);
System.out.println("max:" + max.get());// 打印结果:max:1
Optional<Integer> max = Stream.of(1, 2, 3, 4, 5)
                .max(Comparator.comparingInt(o -> o));
        System.out.println("max:" + max.get());// 打印结果:max:5

对于原Stream指定了Comparator,实际上是找出该Stream中的最小值,不过,在max方法中找最小值,更能体现出来Comparator的作用吧。max的值不言而喻,就是1了。

reduce

Java 8系列之Stream中万能的reduce

Short-circuiting(短路操作)
allMatch

allMatch操作用于判断Stream中的元素是否全部满足指定条件。如果全部满足条件返回true,否则返回false。

示例:

boolean allMatch = Stream.of(1, 2, 3, 4)
    .allMatch(integer -> integer > 0);
System.out.println("allMatch: " + allMatch); // 打印结果:allMatch: true 

anyMatch

anyMatch操作用于判断Stream中的是否有满足指定条件的元素。如果最少有一个满足条件返回true,否则返回false。

示例:

boolean anyMatch = Stream.of(1, 2, 3, 4)
    .anyMatch(integer -> integer > 3);
System.out.println("anyMatch: " + anyMatch); // 打印结果:anyMatch: true 

findAny

findAny操作用于获取含有Stream中的某个元素的Optional,如果Stream为空,则返回一个空的Optional。由于此操作的行动是不确定的,其会自由的选择Stream中的任何元素。在并行操作中,在同一个Stram中多次调用,可能会不同的结果。在串行调用时,Debug了几次,发现每次都是获取的第一个元素,个人感觉在串行调用时,应该默认的是获取第一个元素。

示例:

Optional<Integer> any = Stream.of(1, 2, 3, 4).findAny();
limit

limit方法将截取原Stream,截取后Stream的最大长度不能超过指定值N。如果原Stream的元素个数大于N,将截取原Stream的前N个元素;如果原Stream的元素个数小于或等于N,将截取原Stream中的所有元素。

Stream.of(1, 2, 3,4,5)
        .limit(2)
        .forEach(System.out::println);
        // 打印结果
        // 1,2

传入limit的值为2,也就是说被截取后的Stream的最大长度为2,又由于原Stream中有5个元素,所以将截取原Stream中的前2个元素,生成一个新的Stream。

头歌操作系统2.3系统调用命令ls执行的系统调用 设置版本0内核为分析对象。然后一直c直到虚拟机出现。然后一直c就是答案了。 阅读详情

相关推荐

MTK-Display技术解析:从MDP到DDP的架构演进

本文深入解析了联发科(MTK)显示技术从MDP到DDP的架构演进。MDP作为多媒体数据预处理中心,负责格式转换与缩放;而DDP则整合了OVL、COLOR、AAL等模块,并引入CMDQ与场景化模式,实现了从分散处理到统一智能调度的飞跃,旨在提升画质、流畅度并降低功耗。

weixin_29218509的博客 255

谈谈Stream流式处理

Stream APl ( java.util.stream)把真正的函数式编程风格引入到Java中。这是目前为止对Java类库最好的补充,因为Stream API可以极大提供Java程序员的生产力,让程序员写出高效率、干净、简洁的代码。

cjdxyang的博客 746

关于图像傅里叶变换得到的频谱图的通俗理解

傅里叶变换过程: 经过傅里叶变化且频谱居中化处理的频谱图: 1.如果将图像某一行上的灰度变化看作是一个离散信号,那么整张图像可以看作是一个分布在二维平面上的信号,因此图像可看作是空间域信号。傅里叶变换则是将图像灰度分布(空间域信号)变换到了频域上,给我们提供了观察图像的另一个视角。 2.图像的频谱图(频谱居中后)的中心点是频率最低点,以该点为圆心,不同半径的上的点表示不同的频率。这里的图像频率是指对应原图像中的某灰度曲线变化的快慢(这么说不严谨,但是按照上面第1点的角度,似乎也可以这么理解

daimashiren的博客 2万+

Stream双链原理解析

一、简介 Stream是java8加入的新特性,它提供了一种类SQL化的方式来访问集合数据,将对集合的操作清晰明了的展现出来,特别是配合Lambda表达式,能写出非常优雅的代码。 顾名思义,Stream操作过程可以看做数据流过一个管道,入口处集合转换为数据流(Collection.stream()),在管道上设置有一个一个的过滤点(filter、sorted、map等等),数据流过时将想要的数据过滤出来,在出口处将数据流转换为想要的数据类型(forEach、collect、count、max等等)。

cxiaoxifeng的专栏 1462

从Palantir到AI时代:Forward Deployed Engineer模式的深度解析

《从Palantir到AI时代:FDE模式的创新与挑战》摘要:Palantir开创的前置部署工程师(FDE)模式正在成为AI创业公司的标配。该模式通过现场工程师深入了解客户需求,填补产品与实际应用间的鸿沟,颠覆了传统SaaS规模化路径。核心优势在于将定制化服务转化为产品发现机制,特别适合高度异质化的AI市场。成功关键在于平衡定制与标准化,通过合同价值增长、产品杠杆效应等独特指标衡量成效。FDE人才需要兼具领域洞察力与快速原型能力。这一模式表明,在AI等新兴领域,深入客户现场可能比单纯追求技术突破更能创造商业

老孙 | Ethan Sun 的博客:AI 智能体与 AI 原生软件的工程实践 4541

告别WSL!用AMD ROCm7在Windows上跑ComfyUI,我的幻x2025 AI Max+ 395体验与性能调优心得

本文详细介绍了在搭载AMD Ryzen AI Max+ 395处理器的幻x2025笔记本上,如何通过ROCm7在Windows原生环境下高效运行ComfyUI,并分享了一系列性能调优技巧和实战经验,帮助开发者摆脱WSL束缚,提升AI创作效率。

weixin_29102619的博客 1115

关于Stream()和Collectors.joining()字符串连接器

工作时发现一个很棒的拼接字符串的方法: final String[] strs= {"x", "y", "z"}; Stream<String> stream = Stream.of(strs); // 拼接成 [x, y, z] 形式 String result1 = stream.collect(Collectors.joining(", ", "[", "]")); // ...

qq_40673345的博客 1万+

快速上手:网页版EggNOG功能注释全流程解析

本文详细解析了网页版EggNOG在蛋白序列功能注释中的全流程操作,从初识工具到实战技巧,涵盖FASTA格式处理、参数设置、结果解读及常见问题解决方案。特别适合生物信息学初学者快速掌握这一高效注释工具,提升非模式生物基因组研究的注释效率。

weixin_29310631的博客 190

Stream基础篇-Stream入门应用

Spring Cloud Stream是什么? Spring Cloud Stream是一个用来为微服务应用构建消息驱动能力的框架。它可以基于Spring Boot来创建独立的、可用于生产的Spring应用程序。它通过使用Spring Integration来连接消息代理中间件以实现消息事件驱动的微服务应用。简单的说,Spring Cloud Stream本质上就是整合了Spring Boo

海锋博客 1万+

Win11如何更改用户文件夹名(完整流程- 已验证可行)

把C盘所有文件备份,如果不想备份,则选择创建一个C盘的系统还原点(能在后续把C盘玩崩之后恢复原状)

Y_Aryan的博客 5万+

VIVADO IP核之FIR插值器多相滤波仿真

网络上有许多文章介绍FIR低通滤波器的使用,包括仿真。关于FIR低通滤波器的使用,我之前的文章已经介绍过了,本文将继续深入介绍FIR插值器多相滤波的使用方法,并将FIR插值多相滤波的结果与MATLAB仿真计算的结果比较,验证了FIR插值器多相滤波使用正确。

m0_66360845的博客 3382

TCP Thin-Stream连接

Thin-stream属性,意味着应用程序以很低的速率发送数据,致使TCP等传输协议的重传机制不能有效的运行。一些场景(类似于在线游戏,控制系统,股票交易等)中,用户体验取决于数据的发送时延,报文丢失对于服务质量来说是灾难性的。极大的时延是由于TCP依赖于应用程序新的报文的发送,进而通过快速重传来启动丢失报文的重传,而不用等待较长时间的RTO超时。 以上提到的时间敏感的交互应用,通常是会产生thi...

redwingz的博客 1381

《电磁兼容设计》专栏说明

本专栏自2024年1月起开始更新,仅设此一个电磁兼容相关知识专栏,并将一直持续更新下去,无期限

linkking27的博客 791

Java8 Stream的peek()方法和Java Stream Debugger插件

Java8提供了Stream,可以方便的进行一些数据操作,比如提供了过滤,分组甚至并行等特性。 但是我们常常需要查看中间操作的结果,肿么办?? 大救星Stream的peek()方法来了。 我们先看下它的源码: 可以看到参数为Consumer<? super T> action,而且注释还贴心的给出了例子 Stream.of("one", "two", "three"...

悟鸣的技术博客 1万+

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

【Java 8】Stream和方法引用

第一章 Stream流 1.1 引言 (1)传统集合的多步遍历代码 几乎所有的集合(如 Collection 接口或 Map 接口等)都支持直接或间接的遍历操作。而当我们需要对集合中的元素进行操作的时候,除了必需的添加、删除、获取外,最典型的就是集合遍历。例如: import java.util.ArrayList; import java.util.List; public class Demo01ForEach { public static void main(String[] args) {.

weixin_43589563的博客 570

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Java8新特性之Stream流以及方法引用

Java8新特性之Stream流以及方法引用一. String流1. 引言2. 流式思想概述3. 获取流4. 常用方法4.1 逐一处理:forEach4.2 过滤:filter4.3 映射:map4.4 统计个数:count4.5 取前几个:limit4.6 跳过前几个:skip4.7 组合:concat二. 方法引用1. 冗余的Lambda场景2. 问题分析3. 用方法引用改进代码4. 方法引用...

来日浅谈的博客 5581

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Java8 Stream流 常用方法

需要先掌握 1.Lambda 表达式 菜鸟教程 Lambda 表达式,也可称为闭包,它是 Java 8 的重要新特性。 Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中)。 以下是lambda表达式的重要特征: 可选类型声明:不需要声明参数类型,编译器可以统一识别参数值。 可选的参数圆括号:一个参数无需定义圆括号,但多个参数需要定义圆括号。 可选的大括号:如果主体包含了一个语句,就不需要使用大括号。 可选的返回关键字:如果主体只有一个表达式返回值则编译器会自动返回值,大括号需要指定明表

林临的博客 491

这么简单,还不会使用java8 stream流的map()方法吗?

在日常的开发工作中经常碰到要处理list中数据的问题,比如从数据库中查出了很多学生,由于一些原因需要在内存中找出这些学生中的所有姓名,或者把名为“王五”的语文成绩暂时修改为“100”,这些问题怎么处理呐,之前我们想到的是遍历每个元素,然后取出来放到另外一个集合中,在java8中对集合可以进行流式操作使上面的处理更简洁。今天来看下map()方法的使用。stram流式处理中有map方法,先看下其定义,该方法在java.util.stream.Stream类中,可以看到map()方法接收一个函数式接口参数,入参有

Candyz7的博客 1万+

java8 stream reduce 方法用法 java stream reduce 方法使用方法

java8 stream reduce 方法用法 java stream reduce 方法使用方法 在使用Stream的reduce方法时,发现该方法有 3个重载方法,分别是: 一个参数、两个参数、三个参数的,那么这3个重载方法的区别和用法呢, 本文将研究3个重载方法之间的区别,理清 一个参数、两个参数、三个参数 的使用场景。

HaHa_Sir的博客 9476

详解Java8 Collect收集Stream的方法

转载自:https://www.jb51.net/article/138519.htm 这篇文章主要介绍了Java8-Collect收集Stream的方法,提到了收集器的作用,连接收集器的方法,需要的朋友可以参考下 Collection, Collections, collect, Collector, Collectos Collection是Java集合的祖先接口。 Collection...

johnhuster的专栏 8462

map 详细解析 Java 8 Stream API 中的 map 方法

super T,?这个方法接受一个 Function 类型的参数,即一个将流中每个元素转换为另一种形式的函数,并返回一个包含转换后元素的新流。

一名资深Java工程师的技术分享 1万+

java流对象_8种方法在java8中创建流对象(Stream)

8种方法在java8中创建流对象(Stream)创建空的Streamempty()方法用来创建一个空的流Stream stream = Stream.empty();stream.forEach(System.out::println);这个方法经常被用在创建一个不含元素的空的流进行返回,避免返回nullpublic Stream streamOf(List list) {return list ...

weixin_34518838的博客 2374

Java 8 forEach方法 简单例子 | java8 stream流操作的flatMap

1.1 通常这样遍历一个Map Map<String, Integer> items = new HashMap<>(); items.put("A", 10); items.put("B", 20); items.put("C", 30); items.put("D", 40); items.put("E", 50); items.put("F", 60); for ...

蚁人日记 3629

Java8常用特性:Lambda、Stream流、方法引用、函数式接口

文章目录1、函数式接口2、Lambda表达式3、方法引用4、Stream流5、Optional类 1、函数式接口 定义:只包含一个抽象方法的接口,称为函数式接口 常见的函数式接口举例: 我们可以在一个接口上使用 @FunctionalInterface 注解,这样做可以检 查它是否是一个函数式接口。比如我们创建一个接口,里面定义两个抽象方法后家上注解,但是这样会发现编译就会报错,因为它并不是函数式接口 2、Lambda表达式 表达式语法: Lambda 表达式:在Java 8 语言中引入的一种新的语法元

保持学习 4132

java8 Stream mapToLong方法

方法是 Java 中Stream接口的一部分,用于将流中的每个元素通过给定的函数mapper转换成一个long类型的值,并将这些long值组成一个新的LongStream。这个方法主要用于类型转换,特别是当你需要从对象中提取一个long类型的字段或属性时非常有用。

坚定目标,超越自我 1278

java stream 读取_详解JAVA8Stream 方法引用(基础){全}

主要内容:1: Stream流1.1: Filter1.2: Map1.3: limit1.4: skip2: 方法引用2.1 : 系统类方法引用2.2 : 构造器方法引用2.3 : 静态方法引用2.4 : 数组的方法引用2.5 : 对象的方法引用2.6 : 通过this super引用成员方法1:Stream流说到Stream便容易想到I/O Stream,而实际上,谁规定“流”就一定是“IO流...

weixin_39604983的博客 485
上一篇: Java 8 Stream详解
下一篇: SQL中varchar类型在where中注意事项
小许子是逗星人
博客等级 码龄11年 2粉丝 24原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值