四、java函数式编程-高级使用案例(完)
本章介绍一些常用的流和Lambda 表达式的高级使用案例。
一、流收集器
初始化设定代码
1、partitioningBy收集器,它接受一个流, 并将其分成两部分,它使用 Predicate 对象判断一个元素应该属于哪个部分, 并根据布尔值返回一个 Map 到列表。 因此, 对于 true List 中的元素, Predicate 返回 true; 对其他 List 中的元素, Predicate 返回 false。 如下图所示
partitioningBy收集器
下面的例子使用partitioningBy将学生按性别分成两类,代码如下
2、groupingBy收集器,是一种更自然的分割数据操作, 与将数据分成 ture 和 false 两部分不同, 可以使 用任意值对数据分组。groupingBy 收集器接受一个分类函数, 用来对数据分组, 就像 partitioningBy 一样, 接受一个Predicate 对象将数据分成 ture 和 false 两部分。 这里groupingBy使用的分类器是一个 Function 对象, 和 stream map 操作用到的一样。如下图所示
groupingBy收集器
下面的例子使用groupingBy将学生按成绩分成3个等级,代码如下
3、其他一些收集器,代码如下
4、组合使用收集器。虽然各种收集器已经很强大了,但如果将它们组合起来,会变得更强大。 代码如下
二、流并行处理
并行流就是一个把内容分成多个数据块,并用不同的线程分别处理每个数据块的流。这样一来,你就可以自动把给定操作的工作负荷分配给多核处理器的所有内核,提高性能。并行化操作流只需改变一个方法调用,如果已经有一 个Stream对象,调用它的parallel 方法就能让其拥有并行操作的能力。 如果想从一个集合类创建一个流,调用 parallelStream 就能立即获得一个拥有并行能力的流。代码如下
在第二章中,举例使用Stream的reduce方法画出计算过程,现在使用并行处理,代码如下
Stream在内部分成了几块,因此可以对不同的块独立并行进行reduce操作,同一个reduce操作会将各个子流的部分reduce结果合并起来,得到整个原始流的归纳结果,如下图
并行reduce计算示例图
并行流用处很多,不需要自行写线程处理,所以可以简单高效地写出高性能代码。常见的并行多次网络请求合并结果,简单的模拟代码如下
三、Lambda表达式在Reactor中的应用
Reactor实现了响应式编程Reactive Streams规范,是异步非阻塞框架,Spring WebFlux是基于Reactor实现的异步非阻塞式的 Web框架,它能够充分利用多核 CPU的硬件资源去处理大量的并发请求。
Flux和Mono是Reactor中的两个基本概念,充当响应式编程中发布者的角色,在Spring WebFlux中直接返回Flux和Mono对象,由客户端充当订阅者。
- Mono:返回0或1个元素,是单个对象
- Flux:返回0到N个元素,是列表对象
使用方法举例
详细内容参考以下文档
- https://docs.spring.io/spring-framework/docs/current/reference/html/web-reactive.html#spring-webflux
- https://projectreactor.io/docs/core/release/reference/
四、Lambda表达式在log4j中的应用
相对于其他日志组件,log4j2提供了Lambda表达式写法,它有什么作用呢,对比一下下面的代码
第一种写法:不管日志是什么级别readRequestHeads方法都会执行
第二种写法:加了逻辑判断,在debug级别以上readRequestHeads方法不会执行
第三种写法:参数传入了Lambda表达式,在内部实现是上先判断日志级别,再决定Lambda表达式是否执行,所以在debug级别以上readRequestHeads方法不会执行
这里就可以看出日志中使用Lambda表达式可以有条件的延迟执行日志拼装,而无需增加判断是否启用了请求的日志级别。
详细内容参看以下文档
https://logging.apache.org/log4j/2.x/manual/api.html#LambdaSupport
Java 开发中的 9 个实用技巧:案例详解
Java 开发中,总有一些技巧能够帮助我们提高代码质量和开发效率。下面,我们来分享 9 个 Java 技巧,每个技巧都附上实际案例,帮助你在工作中立刻应用。
final 关键字可以保证变量不可变,类不可继承,方法不可重写。在多线程环境下,final 可以让代码更安全、清晰。
案例:
解析:通过 final,我们可以避免意外修改 name 值,保证了数据一致性。
Optional 是 Java 8 引入的一个容器类,用于避免空指针异常。它使代码更加可读,便于处理可能为空的对象。
案例:
解析:通过 Optional,我们能够优雅地处理对象可能为空的情况,避免频繁的 null 检查。
Lambda 表达式可以让代码更简洁,便于对集合等操作进行函数式编程。
案例:
解析:Lambda 表达式简化了迭代操作,增强了代码可读性,特别适合处理集合类。
Streams API 提供了一种高效、简洁的方式来处理集合数据。使用 filter、map、reduce 等操作,我们可以轻松处理大批量数据。
案例:
解析:通过 Stream,我们可以轻松筛选、转换和收集数据,提高了代码的简洁性和可读性。
在循环中使用 String 拼接会导致性能下降,因为 String 是不可变的,每次拼接都会生成新的对象。使用 StringBuilder 可以提高效率。
案例:
解析:StringBuilder 避免了多次字符串对象的创建,适合需要频繁拼接字符串的场景。
选择合适的数据结构可以大大提高程序性能。要根据具体场景选择 ArrayList、LinkedList、HashMap、TreeMap 等合适的数据结构。
案例:
解析:选择合适的数据结构可以提升性能,HashMap 适合快速查找,TreeMap 适合需要排序的场景。
Java 的 java.util.concurrent 包提供了许多工具,如 ExecutorService、CountDownLatch、Semaphore 等,可以更安全、简单地实现多线程。
案例:
解析:通过 ExecutorService,我们可以更方便地管理线程池,提高多线程处理的效率。
良好的异常处理可以提高系统的稳定性。在可能出错的地方使用 try-catch,并结合日志记录有助于排查问题。
案例:
解析:通过捕获异常并记录错误日志,我们可以及时发现和修复问题,避免系统崩溃。
注释可以帮助后续维护者理解代码意图,而遵循规范可以提升团队协作效率。
案例:
解析:良好的注释和代码风格不仅让代码更易读,也有助于团队成员的理解和维护。
通过实践以上 9 个技巧,不仅可以帮助你编写出更高效、稳定的代码,还能提升团队协作效果。希望这些技巧能在日常开发中为你带来帮助,让你的代码更加健壮和优雅。
阿里大牛都在读的10本Java实战书籍,Java开发进阶必备书单
关乎于程序员,除了做项目来提高自身的技术,还有一种提升自己的专业技能就是:多!看!书!
毕竟,书是学习的海洋呢!So,Java程序员你们准备好了吗?双手奉上Java程序员必读之热门书单。
在下面这 13 本书籍中小编还是要建议大家可以先去关注英文原版,毕竟翻译的书籍中都有一定的语法错误。
入门
《SSM企业级框架实战》
作者: 肖睿/丁慧洁/张宁彬
简介:框架(Framework)的本质为某种应用的半成品,即把不同应用程序中的共性内容抽取出来而形成的半成品程序。SSM框架是以Spring为核心,整合Spring MVC和Mybatis的轻量级框架技术的组合。
利用SSM整合框架可以开发出分层、易扩展、易维护的企业级应用系统,能够极大地满足企业需求,减少开发工作量,提高开发效率和质量,并有效减少维护工作量。
为保证最优学习效果,本书紧密结合实际应用,利用经典案例说明和实践,提炼含金量十足的开发经验,为读者提供与实际开发项目接近的案例。
对这十本电子版书籍感兴趣的工程师朋友们可以转发此文关注我私信回复【架构书籍】免费拿走
SSM企业级框架实战电子版
- 企业开发概述
- Sprine架构设计
- Spr ing核心概念IoC
- Spr ing核心概念AOP
- Sprine应用扩展
- Spr ing MYC映射控制器
- Spr ing MYC绑定校验
- Spring MVC核心应用
- MyBatis配置
- MyBati s高级应用
- SSM框架整合
- 项目实战: si会员商城
《Java并发编程入门到精通》
作者:张振华
简介:本书作者结合自己10多年Java并发编程经验,详细介绍了Java 并发编程的基础概念、工作原理、编程技巧和注意事项,对Java高性能高并发编程有极大的参考价值。
本书内容包括并发编程概念,线程,线程安全,线程集合类,线程阀,线程池,Fork/Join, 线程、线程池在互联网项目开发的应用,线程监控及线程分析,Android 中线程应用。
本书适合Java开发初学者,Java 开发工程师,以及Java网络应用优化人员使用,也适合高校相关专业的师生作为课程设计参考使用。
Java并发编程入门到精通电子版
- 线程并发基础
- 线程并发晋级之高级部分
- 实际的使用、监控与扩展
《阿里巴巴Java开发手册》《阿里巴巴Java开发手册终极版》
出品:阿里巴巴
《阿里巴巴Java开发手册》是阿里巴巴集团技术团队的集体智慧结晶和经验总结,经历了多次大规模一线实战的检验及不断完善,系统化地整理成册,回馈给广大开发者。现代软件行业的高速发展对开发者的综合素质要求越来越高,因为不仅是编程知识点,其它维度的知识点也会影响到软件的最终交付质量。
《Java开发实战经典》
作者:李兴华 编著
简介:本书是一本综合讲解Java核心技术的书籍,在书中使用大量的代码及案例进行知识点的分析与运用,并且给出一些比较成熟的开发步骤,帮助读者更好地进行Java的开发。从作者多年的Java培训经验来看,大部分学生对各种高端开发都没有任何问题,唯一的问题在于Java基础并不牢固,而且在国内也始终没有一本真正可以引领读者入门的好书籍,大部分的书籍都是围绕概念本身进行讲解的,没有讲解清楚为什么要具备这些知识以及该如何去理解这些知识。
不知道我应该带着怎样的心情来写这份书评…… 首先java是一门高级语言,不是那么容易吸收和理解的,这就是这本书那么厚的原因吗? 好吧……书中很多都是废话,我一般都是跳着看,只看“注意”和字体加深的部分,以及实例代码。 相比书,光盘里的视频讲解比较实用。
《深入浅出Redis》
作者:黄健宏
简介:本书将对Redis的使用方法进行说明。Redis 是一个内存数据库(或者说内存数据结构)服务器,最初由Salvatore Sanfilippo创建,现在是-个开源软件。本书不要求读者有任何使用Redis的经验,不过因为本书的绝大部分示例都使用了Python 编程语言来与Redis进行交互,所以读者需要对Python有一定程度的认识才能更好地理解本书的内容。
对这十本电子版书籍感兴趣的工程师朋友们可以转发此文关注我私信回复【架构书籍】免费拿走
深入浅出Redis 电子版
- 入门
- 核心概念
- 进阶内容
《Spring源码深度解析》
作者:郝佳
简介:本书完全从开发者的角度去剖析源码,每- -章都会提供具有代表性的实例,并以此为基础进行功能实现的分析,而不是采取开篇就讲解什么容器怎么实现、AOP怎么实现之类的写法。在描述的过程中,本书尽可能地把问题分解,使用剥洋葱的方式一层一层地将逻辑描述清楚,帮助读者由浅人深地进行学习,并把这些难点和问题各个击破,而不是企图一下让读者理解-一个复杂的逻辑。
Spring源码深度解析电子版
- 核心实现
- 企业应用
《分布式服务架构原理、设计与实践》
作者:李艳鹏/杨彪
简介:随着时代的不断发展,分布式服务架构日益流行,已经从SOA服务化发展到了微服务架构。有过惊喜,有过质疑,但这未能阻挡分布式服务架构在互联网行业里的普遍应用。然而,事物总是有两面性的,丰富的新框架及新技术层出不穷,给项目的技术决策者带来了技术选型上的困难。此外,在互联网交易越来越复杂、规模越来越庞大的背景下,解决分布式服务间的事务问题、业务一致性问题、可用性问题、稳定性问题等的困难以指数级增加。
对这十本电子版书籍感兴趣的工程师朋友们可以转发此文关注我私信回复【架构书籍】免费拿走
分布式服务架构原理、设计与实践 电子版
- 分布式微服务架构设计原理
- 彻底解决分布式系统一致性的问题
- 服务化系统容量评估和性能保障
- 大数据日志系统的构建
- 基于调用链的服务治理系统的设计与实现
- Javs服务的线上应急和技术攻关
- 服务的容器化过程
- 敏捷开发2.0的自动化工具
《一线架构师实践权威指南》
作者:温昱
简介:本书致力于为一线架构师,以及软件企业提供务实有效的架构设计方法指导。
本书从架构师经常遇到的困感出发,总结软件架构设计中经常遇到的问题,提出“方法体系必然是软件业界未来发展的重大趋势”这一观点;之后,详细阐述了软件架构设计三个阶段(re-Achitecture阶段、Concepual Arliteture阶段和Refined Architeure阶段)中的各个具体环节,并给出了最佳的实践原则和方法,内容涵盖“需求进,架构出”的整个过程。
一线架构师实践权威指南电子版
- Fre- Ar chi tecture阶段
- Conceptual Ar chi tecture阶段
- Refined Ar chi tecture阶段
- 专题:非功能目标的方法论
《深入理解 Java 虚拟机》
作者:周志明
简介:作为一位Java程序员,你是否也曾经想深入理解Java虚拟机,但是却被它的复杂和深奥拒之门外?没关系,本书极尽化繁为简之妙,能带领你在轻松中领略Java虚拟机的奥秘。本书是近年来国内出版的唯一一本与Java虚拟机相关的专著,也是唯一一本同时从核心理论和实际运用这两个角度去探讨Java虚拟机的著作,不仅理论分析得透彻,而且书中包含的典型案例和最佳实践也极具现实指导意义。
在国内的图书市场上来看,这是一本很优秀的介绍 Java 虚拟机的书籍。读起来很引人入胜,一口气看几章,不费劲。我对本书最大的感受就是:全面。作为一个刚开始接触 JVM 的人,我感觉本书基本上把 JVM 中所涉及的概念涵盖到。
对这十本电子版书籍感兴趣的工程师朋友们可以转发此文关注我私信回复【架构书籍】免费拿走
深入理解Java虚拟机电子版
- 走近Java
- 自动内存管理机制
- 虚拟机执行子系统
- 程序编译与代码优化
- 高效并发
《微服务:Dubbox+ Spring Boot+Docker实战》
作者:肖睿、吴刚山、黄兴、张敏、王伟
微服务:Dubbox+ Spring Boot+Docker实战 电子版
- 架构设计
- 微服务架构
- Docker环境搭建
- SpringBoot初体验
- 使用Dubbox+Spr ing Boot搭建微服务架构
- 基于Redi s+ActiveMQ实现高并发访问
- 分布式下的第三方接入
- 高并发测试
这 10本经典书籍,你都看过吗?
对这十本电子版书籍感兴趣的工程师朋友们可以
转发此文关注我私信回复【架构书籍】免费拿走
本文作者及来源:Renderbus瑞云渲染农场https://www.renderbus.com
文章为作者独立观点不代本网立场,未经允许不得转载。