java8如何判断一个操作是惰性求值还是及早求值

java8如何判断一个操作是惰性求值还是及早求值

看它的返回值:

  • 如果返回值是Stream,那么是惰性求值;
  • 如果返回值是另一个值或为空,那么就是及早求值。
/**
 * @author InJavaWeTrust
 */
public final class Person {
	
	private String name;
	private String sex;
	private String address;
	
	public Person() {
		
	}
	
	public Person(String name, String sex, String address) {
		super();
		this.name = name;
		this.sex = sex;
		this.address = address;
	}
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getSex() {
		return sex;
	}
	public void setSex(String sex) {
		this.sex = sex;
	}
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}
	
	public boolean isSex(String sex) {
		return this.sex.equals(sex);
	}

}
import java.util.ArrayList;
import java.util.List;

/**
 * @author InJavaWeTrust
 */
public class Test {
	
	/**
	 * 惰性求值,这里不会有输出
	 */
	public void filterSex(List<Person> personLst) {
		//如果返回值是Stream,那么是惰性求值
		personLst.stream().filter(person -> {
			System.out.println("惰性求值 " + person.getSex());
			return person.isSex("女");
		});
	}
	
	/**
	 * 及早求值,这里有输出
	 * @param personLst
	 * @return
	 */
	public long getSexCount(List<Person> personLst) {
		//如果返回值是另一个值或为空,那么就是及早求值
		return personLst.stream().filter(person -> {
			System.out.println("及早求值 " + person.getSex());
			return person.isSex("女");
		}).count();
	}

	public static void main(String[] args) {
		Person person1 = new Person("梓涵", "女", "塔克拉玛干");
		Person person2 = new Person("梓轩", "男", "喀什");
		Person person3 = new Person("浩然", "男", "伊利");
		List<Person> personLst = new ArrayList<>();
		personLst.add(person1);
		personLst.add(person2);
		personLst.add(person3);
		//惰性求值
		new Test().filterSex(personLst);
		//及早求值
		new Test().getSexCount(personLst);

	}

}
及早求值 女
及早求值 男
及早求值 男

 

ROS水下仿真神器uuv_simulator:从零搭建水下机器人测试环境(附Gazebo配置全流程) 本文详细介绍了如何使用ROS和uuv_simulator从零搭建水下机器人仿真测试环境,包括Gazebo配置全流程。通过系统环境准备、水下世界构建、机器人模型定制开发等步骤,帮助开发者在虚拟海洋环境中高效验证算法,大幅降低研发成本。特别适合水下机器人研发人员参考。 阅读详情

相关推荐

Dynamics 365 F&O 开发入门(一)-- 从零开始建表

从零开始一步一步教你在Dynamics 365 F&O中创建一个表

qq_48843110的博客 942

JAVA------Stream流

找出该流中大于2的元素,然后将每个元素乘以2,然后忽略掉流中的前两个元素,然后再取流中的前两个元素,最后求出流中元素的总和。源码中是要求为数据类型或者往上的类型,不能为向下的类型。.xxx().yyy():惰性求值、零个或多个中间操作。accumulator不断地将元素累加到结果容器中。finisher用来将结果容器类型转换为另一个类型。suppplier用来创建一个结果容器。combiner在多线程中用来合并结果。.count():及早求值、终止操作。

Thrive的博客 1064

Abaqus小白必看:用Micromechanics Plugin轻松搞定RVE周期性边界条件(附避坑指南)

本文为Abaqus初学者提供了使用官方Micromechanics Plugin插件高效实现复合材料代表性体积单元分析的完整指南。文章详细讲解了从插件安装、模型准备、周期性边界条件自动设置到结果验证的全流程,并重点分享了处理复杂模型和避免常见错误的实用技巧,帮助用户大幅提升RVE分析效率与准确性。

weixin_28363123的博客 802

java8 Stream学习 第一天 惰性求值与及早求值

Stream操作分两种,惰性求值和及早求值 返回值是Stream的是惰性求值,返回其他或返回空的则是及早求值 惰性求值的例子: list.stream().filter(x -&gt; { System.out.println(x); return x.getClazz().equals("会计"); }); 该例只是刻画了stream,并没有做任何操作,所以并不会有打印...

Hiytunes的博客 2188

概述DeepLab系列(deeplab v1, deeplab v2, deeplab v3, deeplab v3+)

前言:图像分割是指像素级别的图像识别,即标注出图像中每个像素所属的对象类别。 语义分割更注重类别之间的区分,而实例分割更注重个体之间的区别。 DeepLab是由Google团队提出的一系列图像分割算法。 DeepLab v1 (2014年) Paper (ICLR 2015) Code 创新点: 空洞卷积(Atrous Conv); <解决编码过程中信号不断被下采样,细节丢失的问题> 全连接条件随机场(Fully-connected Conditional Random Field)。

ZSH12345678900的博客 5529

单总线协议(1—Wire bus)【DS2431】

1—Wire 协议定义了复位脉冲、 应答脉冲、写0、写1、读0和读1时序等几种信号类型。所有的单总线命令序列(初始化ROM 命令功能命令)都是由这些基本的信号类型组成的。识别单总线器件(ROM 命令)单总线器件交换数据(功能命令)初始化单总线器件(初始化)

qq_41883039的博客 1150

Stream的惰性求值解释

在一些复杂的流操作中,可能存在隐式的依赖关系,惰性求值会打破这些隐式的依赖顺序,导致程序的行为不可预测。由于这种执行是按需触发的,操作的执行顺序可能并不是你所期望的顺序,尤其是在多个中间操作的场景下。流中的操作会被逐步执行,但惰性求值可能导致操作的顺序不如你预期的那样,特别是在多线程环境中,如果你依赖于流操作的执行顺序,可能会产生意外的行为。由于惰性求值只有在终止操作时才会执行,调试代码可能会变得更加困难,尤其是在流的操作链非常复杂时,找出问题的根源可能需要一些时间。

enjoyjrc的博客 895

29、机器人动力学中的欧拉 - 拉格朗日与哈密顿力学

本文深入探讨了机器人动力学中的欧拉-拉格朗日与哈密顿力学框架,涵盖向量流形上的辛结构、哈密顿方程的几何代数表述、泊松括号与积分不变量等核心概念。文章详细推导了机电系统中拉格朗日量与哈密顿量的构建方法,并结合牛顿-欧拉算法给出了局部哈密顿量和动量导数的迭代计算流程,适用于多关节机器人的动力学建模与控制设计。通过应用案例展示了理论在双关节机器人手臂中的实际运用,最后展望了其在优化控制、鲁棒性提升及智能融合方向的潜力。

perl8的博客 129

java8 stream中的惰性求值

https://blog.youkuaiyun.com/qq_32961235/article/details/80080980

qq_44761854的博客 736

5大绝招破解.NET Core本地IP访问难题——为什么你的调试总卡在localhost?

摘要: 本文详解5种本地IP访问.NET Core应用的方法,涵盖基础IP绑定(0.0.0.0)、防火墙配置、IIS Express优化、远程调试及ngrok内网穿透。关键步骤包括修改launchSettings.json、PowerShell授权端口、SSH远程调试和ngrok外网映射,并提示常见陷阱(如未绑定IP、防火墙拦截)。通过“魔法法则”组合,可实现局域网/外网高效访问,适用于开发测试场景。 (字数:148)

java专栏 956

关于“为爱发电”的一些说明~~

专栏教学资料+工程文件

数字IC/FPGA杂货铺,找一找,或许有你想要的~ 2676

深入理解JAVA Stream的惰性求值和JVM方法调用

深入理解Java stream的惰性求值

changjiangcccc的博客 1875

【Unity实战100例】Unity循环UI界面切换卡片功能

功能包括:可以设置半径,高度,速度,元素数量用户可以根据自己的实际需求接入 制作思路:创建每个元素对应的虚拟点,通过旋转管理这些虚拟点,然后把旋转信息和位置信息同步给实际的元素

纯技术流日常开发商业开发记录总结等 7718

Java学习笔记(十四)--Java8类库新特性

强烈推荐一个大神的人工智能的教程:http://www.captainbed.net/zhanghan 前言 java8版本是变更最大的一个版本,高效运行事编译器Java虚拟机的出现,使程序员将更多精力放在编写干净,易于维护的代码上,而不用思考如何将每个CPU时钟周期,每字节内存物尽其用。面对大型数据集合,java还欠缺高效的并行操作。java8提供一些新的特性,能够支持代码在多核CP...

至尊宝 2万+

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

java8 Stream stream().filter()进行迭代及实现机制

系列文章目录 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录系列文章目录前言一、使用迭代1.外部迭代2.内部迭代二、实现机制1.惰性求值方法2.及早求值方法3.如何判断方法类型 前言 本文为java8函数式编程读书笔记。 提示:以下是本篇文章正文内容,下面案例可供参考 一、使用迭代 1.外部迭代 先看一个示例:如果要计算从伦敦来的艺术家的人数,要使用外部迭代方式,通常我们会这么写 int count = 0; for (Artist artist : allArti

qq_31277409的博客 1422

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Java8 Stream常用函数及使用说明

Stream函数为我们提供了对集合的一系列操作,简化了对元素的操作复杂度,让我们可以更加专注与业务逻辑 的实现,steam的操作一般需要和Lambda表达式进行结合使用,达到简便的操作及清晰的代码。 Stream的使用主要分两部分: 惰性求值 (of, map, flatmap, filter…) 及早求值 (reduce, max, min, collect…) ...

社区艺术家 5803

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Java8-惰性求值

什么是惰性求值(惰性计算) 惰性求值也叫惰性计算、延迟求职,在函数式编程语言中随处可见。可以这样通俗地理解为:不对给出的表达式立即计算并返回值,而是在这个值需要被用到的时候才会计算。这个是个人理解,有关专业的术语定义请参考百度百科:https://baike.baidu.com/item/惰性计算 什么是及早求值(热情求值) 和惰性求值相反的是及早求值(热情求值),这是在大多数编程语言中...

Zebe 2611

【Java8新特性】Stream 流深度实战:创建 /filter/map/collect 常用操作 + 惰性求值原理解析 + 并行安全避坑

本文是 Java8 Stream 流的实战指南,聚焦这一核心特性如何通过声明式编程简化集合处理,从流的创建、中间 / 终止操作实战,到并行流线程安全避坑,再到 3 道高频面试题解析,搭配可运行代码案例,帮开发者从原理到落地掌握 Stream 流,提升数据处理效率。

Varin 1935

java8 函数式库_JAVA8函数式编程系列2--流(Stream)

Jav8中,在核心类库中引入了新的概念,流(Stream)。流使得程序媛们得以站在更高的抽象层次上对集合进行操作。今天,居士将主要介绍Steam类中对应集合上操作的几个重要的方法。1、 Steam举例对使用Java的程序媛们,当需要处理集合里的每一个数据时,通常是使用迭代,再对每个返回的元素进行处理。比如:int count = 0;ArrayList nameList = new ArrayLi...

weixin_35895994的博客 1441

java stream 多个filter_使用stream,让查找、遍历、过滤更方便,代码更简洁

继Java 8系列之Lambda表达式之后,我们来了解Stream。Stream 是用函数式编程方式在集合类上进行复杂操作的工具,其集成了Java 8中的众多新特性之一的聚合操作,开发者可以更容易地使用Lambda表达式,并且更方便地实现对集合的查找、遍历、过滤以及常见计算等。聚合操作为了学习聚合的使用,在这里,先定义一个数据类:现有一个List list里面有5个Studeng对象,假如我们想获...

weixin_34677379的博客 1万+

java 如何使用Lambda表达式实现延迟计算和惰性求值?

在Java中,Lambda表达式本身并不直接支持延迟计算或惰性求值。然而,你可以使用Lambda表达式与Java的流(Stream)API或其他并发工具一起,来实现这样的功能。以下是一个使用Lambda表达式和Java流API来实现延迟计算的例子: 在上面的代码中,我们创建了一个包含整数的列表,并将其转换为一个流。然后,我们使用操作来定义一个Lambda表达式,该表达式将每个数字平方。然而,此时并没有执行任何计算——流操作是惰性的,这意味着它们只有在需要结果时才会执行。当我们调用方法时,流才开始处理元素,并

m0_60521228的博客 1318

深入浅出惰性求值

惰性求值是一种延迟计算的编程范式,仅在需要结果时才执行表达式计算。其核心优势包括性能优化(避免无效计算)、支持无限数据结构(如迭代器)和增强代码灵活性(如函数式编程)。实现原理主要是将表达式封装为函数或使用生成器工具。典型应用场景涵盖大数据流处理、缓存延迟加载和函数组合等。尽管惰性求值能提升效率,但也存在调试困难、内存管理复杂等局限性。合理运用该技术可显著优化程序性能,特别适用于处理海量数据和高计算成本的场景。

一位人工智能领域的小新,想要努力发光发热 1146

Java8函数式编程(二):类比Spark RDD算子的Stream流操作

1 Stream流 对集合进行迭代时,可调用其iterator方法,返回一个iterator对象,之后便可以通过该iterator对象遍历集合中的元素,这被称为外部迭代(for循环本身正是封装了其的语法糖),其示意图如下: 除此之外,还有内部迭代方法,这正是这里要说明的集合的stream()方法返回的Stream对象的一系列操作,比如,要统计一个数字列表的偶数元素个数,当使用Stream对象的操...

weixin_34194359的博客 521

Java基础30-Java Stream:中间操作与终止操作的执行时机(避免惰性求值坑)

Java Stream 执行机制摘要(149字) Java Stream采用惰性求值机制,中间操作(如filter、map)仅定义处理逻辑而不会立即执行,必须通过终止操作(如collect、forEach)触发实际计算。这种设计提升了性能,支持无限流和操作链组合。典型陷阱是忘记调用终止操作导致逻辑未执行。使用时需注意:1)中间操作可无限串联但无效果;2)终止操作消费流后不可复用;3)流水线按需执行,短路操作可优化性能。理解这一机制能避免常见错误并编写高效流式代码。

千淘万漉虽辛苦,吹尽狂沙始到金 2万+
上一篇: 学习 Redis Set(集合)
下一篇: 学习 Redis Connection(连接)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值