Java8中常见用法

java8 新特性 -Optional的常见用法 Opitonal是java8引入的一个新类,目的是为了解决空指针异常问题。本质上,这是一个包含有可选值的包装类,这意味着 Optional 类既可以含有对象也可以为空。Optional 是 Java 实现函数式编程的强劲一步,并且帮助在范式中实现。但是 Optional 的意义显然不止于此。 阅读详情

Stream是jdk8中java.util包中的新特性
Stream(流)是一个来自数据源的元素队列并支持聚合操作

元素是特定类型的对象,形成一个队列。 Java中的Stream并不会存储元素,而是按需计算。
数据源 流的来源。 可以是集合,数组,I/O channel, 产生器generator 等。
聚合操作 类似SQL语句一样的操作, 比如filter, map, reduce, find, match, sorted等。前面也有提到过
和以前的Collection操作不同, Stream操作还有两个基础的特征:

Pipelining: 中间操作都会返回流对象本身。 这样多个操作可以串联成一个管道, 如同流式风格(fluent style)。 这样做可以对操作进行优化, 比如延迟执行(laziness)和短路( short-circuiting)。
内部迭代: 以前对集合遍历都是通过Iterator或者For-Each的方式, 显式的在集合外部进行迭代, 这叫做外部迭代。 Stream提供了内部迭代的方式, 通过访问者模式(Visitor)实现。

// user对象List转user对象中name字符串的List
List<String> stringList= list.stream().map(UserList::getName).collect(Collectors.toList());

// 1. Stream赋值
Stream stream = Stream.of("a", "b", "c");
// 2. Arrays数组转Stream
String [] strArray = new String[] {"a", "b", "c"};
stream = Stream.of(strArray);
stream = Arrays.stream(strArray);
// 3. 转list
List<String> list = Arrays.asList("a","b","c","d");
// 4.list转Stream
stream = list.stream();

// map 方法用于映射每个元素到对应的结果,以下代码片段使用 map 输出了元素对应的平方数:
 
List<Integer> numbers = Arrays.asList(3, 2, 2, 3, 7, 3, 5);
// 获取对应的平方数
List<Integer> squaresList = numbers.stream().map( i -> i*i).distinct().collect(Collectors.toList());
 
// filter 方法用于通过设置的条件过滤出元素。以下代码片段使用 filter 方法过滤出空字符串:
List<String>strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl");
// count获取空字符串的数量
int count = strings.stream().filter(string -> string.isEmpty()).count();
// 求和
int sum = numbers.stream().mapToInt((x) -> x).summaryStatistics().getSum;
 
 BigDecimal practiceConversionScore = checkList.getRecords().stream()
                .map(RcyLearnTaskUserLinkDto::getRcyLearnTaskUserLinkVo)
                .map(RcyLearnTaskUserLinkVo::getPracticeConversionScore)
                .reduce(BigDecimal.ZERO, BigDecimal::add);
 
// 集合转map
Map<String, String> map = list.stream().collect(Collectors.toMap(Person::getId, Person::getName));  //当key相同时会抛出异常

Map<String, String> map00 = list.stream().collect(Collectors.toMap(item -> item.getVersion(), item -> item.getGroupCode(), (oldVal, currVal) -> currVal));
Map<String, String> map01 = list.stream().collect(Collectors.toMap(item -> item.getVersion(), item -> item.getGroupCode(), (oldVal, currVal) -> oldVal + currVal));

(oldVal, currVal) -> currVal) // key相同时当前值替换原始值
(oldVal, currVal) -> oldVal + currVal //key相同时保留原始值和当前值

例如:Map<Integer, String> map = list.stream().collect(Collectors.toMap(Person::getId, Person::getName,(oldValue, newValue) -> newValue)); //这样就做到了使用新的value替换原有value。

 
 //交集
List<String> collect1 = list1.stream().filter(num -> list2.contains(num))
                .collect(Collectors.toList());
 
//差集 list1-list2
 List<String> collect2 = list1.stream().filter(num -> !list2.contains(num))
                .collect(Collectors.toList());
 
 
//差集list2-list1
List<String> collect3 = list2.stream().filter(num -> !list1.contains(num))
                .collect(Collectors.toList());
 
 //并集  不去重
list1.addAll(list2);
 
 
//并集  去重
List<String> collect4 = list1.stream().distinct().collect(Collectors.toList());

//针对字段求集合
 List<String> fiedlsName = temps.stream().map(p -> p.getBusinessFieldValue()).collect(Collectors.toList());

//按多字段分组
Map<String, List<KeyRiskRank>> countMap = riskRankDis.stream().collect(
                Collectors.groupingBy(
                        e -> e.getDepartmentName() + "-" + e.getRiskRankSum()
                ));

 
 

 Java实现集合转换成另一个集合:

        // 从数据库中查询出的对象集合
        List<OperationStation> operationStations = operationStationJoinMapper.selectJoinByExample(example);
        // 判端是否为空
        if (CollectionUtils.isNotEmpty(operationStations)) {
            // 进行拆解封装
            List<StationDictVO> stationDictVOS = operationStations.stream().map(operationStation -> {
                StationDictVO stationDictVO = new StationDictVO();
                stationDictVO.setStationId(operationStation.getStationId());
                stationDictVO.setStationName(operationStation.getStationName());
                return stationDictVO;
            }).collect(Collectors.toList());
        }

Java8新特性常见用法 Java 8 引入了强大的 Stream API,用于对集合进行复杂的操作,如过滤、映射、排序和收集。等方法,你可以轻松地对数据进行转换、过滤、排序和收集操作,使代码更加简洁和易于维护。是一个收集器,它在收集操作之后应用一个转换函数。Java 8 引入了许多新的集合操作和流操作,使得数据处理更加方便和高效。的详细用法示例,目的是提高开发效率,并增强对多核处理器和并行编程的支持。它需要两个函数,一个用于生成键,另一个用于生成值。将一个元素转换为另一个元素,这里将。方法结合使用,处理流中的字符串。 阅读详情

相关推荐

PostgreSQL+PostGIS实战:5分钟搞定Shapefile数据导入(附避坑指南)

本文详细介绍了如何使用PostgreSQL和PostGIS快速导入Shapefile空间数据,包括5分钟标准流程和常见问题解决方案。通过实战案例和避坑指南,帮助GIS工程师高效处理矢量数据导入中的编码、几何类型、坐标系等典型问题,提升空间数据库管理效率。

weixin_42565652的博客 399

Java 8使用总结

lambda表达式 Runnable r2 = () -> System.out.println("hello"); 箭头左侧,指定了lambda表达式的参数 箭头右侧,lambda体,即要执行的功能 1.无参无返回值 Runnable r1 = new Runnable() { @Override public void run() { Sy...

eRunn 848

从时频谱图到智能感知:雷达信号处理的AI进化之路

本文探讨了人工智能在雷达信号处理中的革命性应用,特别是深度学习在时频谱图分析中的突破性进展。通过对比传统信号处理方法与AI驱动的解决方案,展示了CNN、3D CNN等模型在目标检测、行为识别等场景中的优势,并分析了数据获取、模型优化等关键技术挑战。AI赋能的雷达技术已广泛应用于智能交通、工业检测和医疗健康领域,展现出巨大的发展潜力。

weixin_29284201的博客 504

java8中的一些用法

java8中的一些用法以及实体类复制等小技巧

m0_52941727的博客 705

避坑指南:RK3588上编译EtherCAT 1.6时遇到的权限问题和模块安装错误

本文详细解析了在RK3588平台上编译EtherCAT 1.6时常见的权限问题和模块安装错误,提供了两种实战解决方案和嵌入式开发的通用权限管理策略。通过优化内核配置和编译参数,显著提升实时性能,帮助开发者高效完成EtherCAT主站部署。

weixin_33724046的博客 453

Springboot+Vue 实现鸿蒙商城管理系统开发实践

通过使用 Springboot 和 Vue 技术栈,我们成功实现了鸿蒙商城管理系统的开发。系统具备用户管理、商品管理、订单管理、库存管理和统计分析等功能,支持 Web 端和鸿蒙端的访问和操作。在开发过程中,我们充分利用了 Springboot 的快速开发优势和 Vue 的组件化开发特点,提高了开发效率和系统的可维护性。同时,通过与鸿蒙设备的集成,实现了多设备之间的数据交互和协同工作,提升了用户体验。

ZXJ_SXT的博客 1324

【Java 8 新特性】如何将Java流(Stream)转化成数组(Array)

【Java 8 新特性】如何将Java流转化成数组1.Using Stream.toArray(IntFunction)2.Using Stream.toArray()3.Using IntStream.toArray()4.Using Collectors.toList()5.参考文献 在本页中,我们将学习如何将Java流(Stream)转换为数组(Array)。 最好的转换方法是使用Stream.toArray(IntFunction)方法。 在我们的示例中,我们将通过以下方式将Java流(Stream

猫巳的博客 5万+

【ubuntu24.04】auto remove后,重启,kernel panic ,please reboot your computer vfs unable to mount root fs

Ubuntu 24.04系统在运行auto remove后出现内核恐慌(kernel panic)无法启动,显示"VFS: unable to mount root fs"错误。该问题是由于当前内核被清除导致系统无法挂载根分区。解决步骤包括:1)尝试用GRUB菜单中的旧内核启动;2)在GRUB中临时编辑启动参数;3)使用Ubuntu启动盘进行chroot修复;4)使用Boot-Repair工具一键修复。成功启动后,需要重新安装linux-generic等元包,重建initramfs并更新

突围 1204

List与数组之间的相互转换

List与数组之间的相互转换

开发小鸽 5万+

WPF实战项目十七(客户端):数据等待加载弹框动画

1、在Common文件夹下新建文件夹Events,新建扩展类UpdateLoadingEvent。2、新建一个静态扩展类DialogExtensions来编写注册和推送等待消息弹框方法。3、在ViewModel中添加实现类NavigationViewModel。5、在View文件夹下新建用户控件ProgressView.xmal。4、在主窗体MainView.xmal中给弹窗界面命名。6、在MainView.xmal.cs中注册消息。

yigu4011的博客 2345

1 硬件工程师笔面试高频知识考点真题及解析——电阻

本文系统介绍了电阻的基础知识、选型要点及各类特殊电阻的应用。主要内容包括:1. 电阻选型需考虑阻值、封装、功率、精度、耐压等参数;2. 高频信号优先选用小封装电阻以减小寄生参数;3. 采样电阻需高精度、低温漂以保证测量准确性;4. 详细解析了上拉/下拉电阻、0欧电阻、磁珠等元件的特性与区别;5. 介绍了压敏电阻、热敏电阻等特殊电阻的工作原理及应用场景;6. 阐述了阻抗匹配的重要性及常见匹配方法。文章为电子工程师提供了全面的电阻选型与应用指南。

XU157303764的博客 2834

java中利用流stream将 List 转为数组

List<Integer> list = new ArratList<>(); // 将list转为int数组 list.stream().mapToInt(Integer::intValue).toArray();

weixin_43869318的博客 7045

【研发日记】Matlab/Simulink自动生成代码(二)——五种选择结构实现方法

相比C文本类编程语言,Simulink图形化编程语言的优势是逻辑思路和数据流清晰了很多,劣势是程序执行的时序不明确,而且各个模块的配置使编程的灵活度下降了不少,在使用习惯上面总感觉有各种限制。本文就是拆解Simulink中最基础的几个编程模块,发扬它的优势,避开劣势。

Mr.Cssust的博客 3849

java8 flatMap常见用法

在 Java 8 中,flatMap 是 Stream API 提供的一个非常强大的方法,它结合了映射(map)和扁平化(flatten)两个操作。flatMap 主要用于将流中的每个元素转换为另一个流,然后将这些流合并成一个单一的流。这使得你可以处理嵌套结构的数据,如列表的列表、集合的集合等。flatMap 的常见用法。2. 处理对象的嵌套属性。1. 将嵌套集合扁平化。

qq_36608622的博客 541

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Java8 Steam API 常见用法代码

java8 Steam API 常见用法。

weixin_38926370的博客 611

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

java8 stream 常见用法

Java8 新出的 stream 流操作集合的,每次想使用时,虽然知道有这个功能,但一时想不出来怎么写,网上查有时候不太好查,因此自己来写一篇总结贴。 我们新建一个类 Student。 @Data @AllArgsConstructor public class Student { private String id; private String name; private int age; //班级名称 private String className;

fightingting的博客 336

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

[实践总结] Java8 Optional常见用法

Optional类(java.util.Optional)是一个容器类,代表一个值存在或不存在。Java 8的库设计人员引入了Optional,这样就不用返回众所周知容易出问题的null了。

张紫娃的博客 458

Java8 Stream常见用法

Java8 Stream常见用法

小蜜蜂vs码农 2883

java8 lambda常见用法总结

个人总结的一些关于java8 lambda stream相关的操作和写法,可以直接复制粘贴,亲自体验功能。 package test; import lombok.Data; import lombok.ToString; import lombok.experimental.Accessors; import java.util.*; import java.util.stream.Collectors; import java.util.stream.Stream; @ToString @Da

感谢关注点赞,笔芯啾咪! 397

java optional 报错,Java8 Optional 几个常见错误用法

Java 8引入的 Optional类型,基本是把它当作 null值优雅的处理方式。其实也不完全如此,Optional在语义上更能体现有还是没有值。所以它不是设计来作为 null的替代品,如果方法返回 null值表达了二义性,没有结果或是执行中出现异常。在 Oracle 做 Java语言工作的 BrianGoetz在 Stack Overflow回复 Should Ja...

weixin_30234101的博客 1419

Java8新特性Lambda表达式的一些常见用法

一、Lamda简单介绍 Lambda表达式是JAVA8中提供的一种新的特性,它支持Java也能进行简单的“函数式编程”。 它是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象(lambda abstraction),是一个匿名函数,即没有函数名的函数。 要理解函数式编程的产生目的,就要先理解匿名内部类。 先来简单看下匿名内部类调用方式。 interface Animal { void run(); } public class Main {

river106的博客 824

Java 8的一些常见用法

lambda表达式 语法 最常用的: Runnable runnable = () -> System.out.println("Hello!"); Thread t = new Thread(runnable); t.start(); t.join(); 你还可以这么写: Thread t = new Thread(() -> System.out.print

指尖的灵动 728

Java8中Lambda表达式之Collection 的常见用法

在java8中引入了Lambda表达式。其实,他就是一个匿名函数。我们经常会用到一些循环遍历,起始完全就可以通过Lambda来简化我们不必要的操作,下面我们来看一下Lambda常用的方法。

ybb_ymm的专栏 1204

Java8流常见用法

【代码】Java8流常见用法。

张紫娃的博客 226

Java8日期类型常见用法总结

Java8新引入了一些日期、时间对象,这些对象与老的日期时间对象的使用上存在很大的不同,刚开始会很不习惯,但经过初步的使用后一定会更习惯使用这些新的API的,它使得对日期时间对象的操作上不会再如老的使用方式那样痛苦。 首先需要明确的一个概念就是,Java8中将日期与时间对象区分开了。如果只需要使用年、月、日而不关注时间信息,可以直接使用LocalDate;如果需要关注时间信息,可以使用LocalD...

icarusliu的专栏 2080
上一篇: 设计模式--策略模式(注解)
下一篇: redisson与aop解决接口幂等性
splendor.s
博客等级 码龄10年 91粉丝 67原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值