java-lambda-常用方法总结汇总

news2024/9/19 10:39:11

1、获取对象集合中的一个字段生成新的集合,【List<BeanA> List<Long>List<BeanA> Set<Long>List<BeanA> String

//查询结果

List<MnsBusinessMessageVO> list = businessMessageMapper.list(query);

//对象集合 转 Long集合

List<Long> userList = list.stream().map(head -> {return head.getCreateUserId();}).collect(Collectors.toList());

List<Long> teacherIdList = conflictData.stream().distinct().collect(Collectors.mapping(item -> item.getTeacherId(), Collectors.toList()));

//对象集合 id,id,id,id字符串

String ids = list.stream().map(e->getCreateUserId()).collect(Collectors.joining(","));

String ids = param.getStudentIdList().stream().map(String::valueOf).collect(Collectors.joining(","))

 

 

//Long集合 转 Long数组

Long[] userIds = userList.toArray(new Long[userList.size()]);

Long[] userIds = userList.stream().toArray(Long[]::new);

 

List<Long>result=Arrays.stream(str.split(",\\s*")).map(Long::parseLong)//将每个字符串转换成长整型

.collect(Collectors.toList());

 

 

 

//对象集合 Long集合

List<Long> userList = list.stream().map(MnsBusinessMessageVO::getCreateUserId).collect(Collectors.toList());

//对象集合的多个字段合并成一个集合

List<Long> ids = modelList.stream().flatMap(item -> Stream.of(item.getCreateUserId(), item.getUpdateUserId())).filter(Objects::nonNull).distinct().collect(Collectors.toList());

 

 

//对象集合 Long集合

List<Long> userList = list.stream().map(e->getCreateUserId()).collect(Collectors.toList());

 

 

//对象集合 Long set集合

Set<Long> userSet = list.stream().map(MnsBusinessMessageVO::getCreateUserId).collect(Collectors.toSet());

 

2、获取对象集合中的(一个或者某个字段)生成新的对象集合 List<BeanA> List<BeanB>

//查询结果

List<MnsVO> list = businessMessageMapper.list(query);

//List<MnsVO> List<Mns>

//Mns需要有多参构造函数

List<Mns> newObjList = list.stream().map(e -> new Mns(e.getId(),e.getBusinessName(),e.getBusinessCode())).collect(Collectors.toList());

 

3toMapList<obj>  map<Long,obj> map<Long,String>

/**

*  List<obj> map<Long,obj>

*  使用Collectors.toMap的时候,如果有可以重复会报错,所以需要加(k1, k2) -> k1

*  (k1, k2) -> k1 表示,如果有重复的key,则用新的 k1替换旧的 K2

*   Function.identity()也可以写成user -> user

*/

 

Map<Long, User> maps = userList.stream().collect(Collectors.toMap(User::getId, Function.identity(), (key1, key2) -> key2));

//List<obj> map<Long,String>

Map<Long, String> maps = userList.stream().collect(Collectors.toMap(User::getId, User::getAge, (key1, key2) -> key2));

4、对象集合深拷贝

//深拷贝(对象地址不同)

List<StartUpTimeIntervalVO> sourceList = new ArrayList<>();

List<StartUpTimeIntervalVO> copyList = sourceList.stream().map(e -> {

    StartUpTimeIntervalVO copy = new StartUpTimeIntervalVO();

    BeanUtils.copyProperties(e, copy);

    return copy;

}).collect(Collectors.toList());

5、skip()跟limit()实现分页

List<EverydayStartupVO> resultList = allList.stream().skip(pageSize * (pageNum - 1)).limit(pageSize).collect(Collectors.toList());

6groupingBy分组【List<Obj> Map<Long,List<Obj>>

//Java8之前

List<UserInfo> originUserInfoList = new ArrayList<>();

originUserInfoList.add(new UserInfo(1L, "吴半杯", 18,"深圳"));

originUserInfoList.add(new UserInfo(3L, "吴半半", 26,"湛江"));

originUserInfoList.add(new UserInfo(2L, "吴半桶", 27,"深圳"));

Map<String, List<UserInfo>> result = new HashMap<>();

for (UserInfo userInfo : originUserInfoList) {

  String city = userInfo.getCity();

  List<UserInfo> userInfos = result.get(city);

  if (userInfos == null) {

      userInfos = new ArrayList<>();

      result.put(city, userInfos);

    }

  userInfos.add(userInfo);

}

Map<Long, List<CalculateVO>> calculateMap = calculateList.stream().collect(Collectors.groupingBy(CalculateVO::getEquipmentId));

报错:java.lang.UnsupportedOperationException: nullcalculateMap中的集合无法做add操作,变更为

Map<Long, List<CalculateVO>> calculateMap = calculateList.stream()

.collect(Collectors.groupingBy(CalculateVO::getEquipmentId,Collectors.toCollection(ArrayList::new))));

 

Map<Long,List<Obj>> List<Obj>

Map<Long, List<String>> listMap = new HashMap<>();

listMap.put(1L, Arrays.asList("a", "b", "c"));

listMap.put(2L, Arrays.asList("d", "e", "f"));

listMap.put(3L, Arrays.asList("g", "h", "i"));

//转换

List<String> streamResult = listMap.values().stream().flatMap(Collection::stream).collect(Collectors.toList());

 

Map<Long,Obj>List<Obj>

 List<SportsTypeStatisticalVO> itemList = itemMap.entrySet().stream()

                        .map(entry -> entry.getValue())

                        .collect(Collectors.toList());

 

 

 

7、sorted+Comparator排序

List<UserInfo> userInfoList = new ArrayList<>();

userInfoList.add(new UserInfo(1L, "吴半杯", 18));

userInfoList.add(new UserInfo(3L, "吴半", 26));

userInfoList.add(new UserInfo(2L, "", 27));

/**

 *  sorted + Comparator.comparing 排序列表,

 */

//根据用户年龄升序排序

userInfoList = userInfoList.stream().sorted(Comparator.comparing(UserInfo::getAge)).collect(Collectors.toList());

//根据创建时间的毫秒值排序升序

userInfoList = userInfoList.stream().sorted(Comparator.comparing(s->s.getCreateTime().getTime())).collect(Collectors.toList())

 

userInfoList.forEach(a -> System.out.println(a.toString()));

/**

 * 如果想降序排序,则可以使用加reversed()

 */

System.out.println("开始降序排序");

userInfoList = userInfoList.stream().sorted(Comparator.comparing(UserInfo::getAge).reversed()).collect(Collectors.toList());

userInfoList.forEach(a -> System.out.println(a.toString()));

//运行结果

UserInfo{userId=1, userName='吴半杯', age=18}

UserInfo{userId=3, userName='吴半', age=26}

UserInfo{userId=2, userName='', age=27}

开始降序排序

UserInfo{userId=2, userName='', age=27}

UserInfo{userId=3, userName='吴半', age=26}

UserInfo{userId=1, userName='吴半杯', age=18}

 
多个字段排序
年龄降序,班级降序

//方法1:先对年龄进行升序,升序结果进行反转,再对班级进行降序

userList = userList.stream().sorted(Comparator.comparing(User::getAge).reversed().thenComparing(User::getClassNo, Comparator.reverseOrder())).collect(Collectors.toList());

//方法2:直接对年龄进行降序,再对班级进行降序

userList = userList.stream().sorted(Comparator.comparing(User::getAge, Comparator.reverseOrder()).thenComparing(User::getClassNo,Comparator.reverseOrder())).collect(Collectors.toList());

//方式3:先对年龄进行升序,再对班级进行升序,最后对结果进行反转

userList = userList.stream().sorted(Comparator.comparing(User::getAge).thenComparing(User::getClassNo).reversed()).collect(Collectors.toList());

年龄升序,班级降序

//方法1:先对年龄进行升序,升序结果进行反转,再进行班级升序,结果进行反转(有点绕,年龄被排了三次升--)

userList = userList.stream().sorted(Comparator.comparing(User::getAge).reversed().thenComparing(User::getClassNo).reversed()).collect(Collectors.toList());

//方法2:直接对年龄进行升序,再对班级进行降序

userList = userList.stream().sorted(Comparator.comparing(User::getAge).thenComparing(User::getClassNo, Comparator.reverseOrder())).collect(Collectors.toList());

//单纯的反转排序

list=list.stream().sorted(Comparator.reverseOrder()).collect(Collectors.toList());

如果只进行单个字段的升序降序排列,我们使用reversed() 或者 Comparator.reverseOrder() 都可以

如果要进行多个字段的升序降序排列,我们还是使用 Comparator.reverseOrder() 会更优雅、更好理解一些

reversed():是对排序结果进行反转

Comparator.reverseOrder():是排序值的降序排序

 

 

 

8、distinct可以去除重复的元素:

List<String> list = Arrays.asList("A", "B", "F", "A", "C");

List<String> temp = list.stream().distinct().collect(Collectors.toList());

9、findFirst 返回第一个元素(ifPresent判断类对象是否存在)

List<String> list = Arrays.asList("A", "B", "F", "A", "C");

list.stream().findFirst().ifPresent(System.out::println);

10、 anyMatch是否至少匹配一个元素

anyMatch 检查流是否包含至少一个满足给定谓词的元素。

Stream<String> stream = Stream.of("A", "B", "C", "D");

boolean match = stream.anyMatch(s -> s.contains("C"));

System.out.println(match);

//输出

true

11、allMatch 匹配所有元素

allMatch 检查流是否所有都满足给定谓词的元素。

Stream<String> stream = Stream.of("A", "B", "C", "D");

boolean match = stream.allMatch(s -> s.contains("C"));

System.out.println(match);

//输出

false

12、foreach 遍历list,遍历map

/**

 * forEach 遍历集合List列表

 */

List<String> userNameList = Arrays.asList("吴半杯", "吴半", "");

userNameList.forEach(item->{System.out.println(item);});

 

/**

 *  forEach 遍历集合Map

 */

HashMap<String, String> hashMap = new HashMap<>();

hashMap.put("博客", "吴半杯");

hashMap.put("职业", "吴半");

hashMap.put("昵称", "捡瓶子的小男孩");

hashMap.forEach((k, v) -> System.out.println(k + ":\t" + v));

//运行结果

捡田螺的小男孩

程序员田螺

捡瓶子的小男孩

职业: 程序员田螺

公众号: 捡田螺的小男孩

昵称: 捡瓶子的小男孩

13、 Max,Min最大最小

使用lambda流求最大,最小值

List<UserInfo> userInfoList = new ArrayList<>();

userInfoList.add(new UserInfo(1L, "吴半杯", 18));

userInfoList.add(new UserInfo(3L, "吴半", 26));

userInfoList.add(new UserInfo(2L, "", 27));

Optional<UserInfo> maxAgeUserInfoOpt = userInfoList.stream().max(Comparator.comparing(UserInfo::getAge));

maxAgeUserInfoOpt.ifPresent(userInfo -> System.out.println("max age user:" + userInfo));

Optional<UserInfo> minAgeUserInfoOpt = userInfoList.stream().min(Comparator.comparing(UserInfo::getAge));

minAgeUserInfoOpt.ifPresent(userInfo -> System.out.println("min age user:" + userInfo));

//运行结果

max age user:UserInfo{userId=2, userName='程序员田螺', age=27}

min age user:UserInfo{userId=1, userName='捡田螺的小男孩', age=18}

一般count()表示获取流数据元素总数。

List<UserInfo> userInfoList = new ArrayList<>();

userInfoList.add(new UserInfo(1L, "吴半杯", 18));

userInfoList.add(new UserInfo(3L, "吴半", 26));

userInfoList.add(new UserInfo(2L, "", 27));

long count = userInfoList.stream().filter(user -> user.getAge() > 18).count();

System.out.println("大于18岁的用户:" + count);

//输出

大于18岁的用户:2

14、map转换

map方法可以帮我们做元素转换,比如一个元素所有字母转化为大写,又或者把获取一个元素对象的某个属性,demo如下:

List<String> list = Arrays.asList("jay", "tianluo");

//转化为大写

List<String> upperCaselist = list.stream().map(String::toUpperCase).collect(Collectors.toList());

upperCaselist.forEach(System.out::println);

Reduce可以合并流的元素,并生成一个值

int sum = Stream.of(1, 2, 3, 4).reduce(0, (a, b) -> a + b);

System.out.println(sum);

//peek()方法是一个中间Stream操作,有时候我们可以使用peek来打印日志。

List<String> result = Stream.of("吴半杯", "吴半", "")

            .filter(a -> a.contains(""))

            .peek(a -> System.out.println("关注:" + a)).collect(Collectors.toList());

System.out.println(result);

15、filter()过滤

从数组集合中,过滤掉不符合条件的元素,留下符合条件的元素。

List<UserInfo> userInfoList = new ArrayList<>();

userInfoList.add(new UserInfo(1L, "吴半杯", 18));

userInfoList.add(new UserInfo(2L, "吴半", 27));

userInfoList.add(new UserInfo(3L, "", 26));

       

/**

 * filter 过滤,留下超过18岁的用户

 */

List<UserInfo> userInfoResultList = userInfoList.stream().filter(user -> user.getAge() > 18).collect(Collectors.toList());

 

userInfoResultList.forEach(a -> System.out.println(a.getUserName()));

       

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2141465.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计算机网络通关学习(一)

简介 之前我通过王道的考研课进行了计算机网络的学习&#xff0c;但是在秋招准备过程中发现之前的笔记很多不足&#xff0c;学习的知识不够深入和巩固&#xff0c;所以再重新对《图解HTTP》&《图解TCP/IP》进行深度学习后&#xff0c;总结出了此篇博客&#xff0c;由于内容…

re题(27)BUUFCTF-[MRCTF2020]Transform

BUUCTF在线评测 (buuoj.cn) 先到ida&#xff0c;先看一下字符串 找到主函数 int __cdecl main(int argc, const char **argv, const char **envp) {char Str[104]; // [rsp20h] [rbp-70h] BYREFint j; // [rsp88h] [rbp-8h]int i; // [rsp8Ch] [rbp-4h]sub_402230(argc, arg…

ai扩图用什么软件?探索五大高效工具

Hey朋友们&#xff0c;最近在社交媒体上看到不少超清晰的美图&#xff0c;是不是特别羡慕&#xff1f; 别急&#xff0c;告诉你个秘密武器——ai扩图软件。这些神器能帮你智能扩展图片内容&#xff0c;让每张图都充满细节。 想知道都有哪些好用的ai扩图软件免费吗&#xff1f…

CentOS上使用rpm离线安装Mosquitto(Linux上Mqtt协议调试工具)附资源下载

场景 Windows上Mqtt服务器搭建与使用客户端工具MqttBox进行测试&#xff1a; Windows上Mqtt服务器搭建与使用客户端工具MqttBox进行测试_微软消息队列 测试工具-CSDN博客 Windows服务器上Mqtt服务器EMQX的安装使用&#xff1a; Windows服务器上Mqtt服务器EMQX的安装使用_wi…

Objects as Points基于中心点的目标检测方法CenterNet—CVPR2019

Anchor Free目标检测算法—CenterNet Objects as Points论文解析 Anchor Free和Anchor Base方法的区别在于是否在检测的过程中生成大量的先验框。CenterNet直接预测物体的中心点的位置坐标。 CenterNet本质上类似于一种关键点的识别。识别的是物体的中心点位置。 有了中心点之…

Python青少年简明教程:tkinter库入门

Python青少年简明教程&#xff1a;tkinter库入门 tkinter是Python的标准GUI&#xff08;图形用户界面&#xff09;库。它提供了一种快速而简单的方法来创建GUI应用程序。tkinter是Python自带的&#xff0c;无需额外安装&#xff0c;随 Python 安装包一起提供。 在Python 3.x中…

Leetcode—1137. 第 N 个泰波那契数【简单】

2024每日刷题&#xff08;160&#xff09; Leetcode—1137. 第 N 个泰波那契数 记忆化搜索实现代码 class Solution { public:int tribonacci(int n) {int zero 0;int one 1;int two 1;if(n 0) {return zero;}if(n 1) {return one;}if(n 2) {return two;}int ans 0;fo…

三重因素,巨人瘦身——从 IBM中国研发部裁员讲起

如何看待IBM中国研发部裁员&#xff1f;近日&#xff0c;IBM中国宣布撤出在华两大研发中心&#xff0c;引发了IT行业对于跨国公司在华研发战略的广泛讨论。这一决定不仅影响了众多IT从业者的职业发展&#xff0c;也让人思考全球化背景下中国IT产业的竞争力和未来发展方向。面对…

手机、平板电脑编程———未来之窗行业应用跨平台架构

一、平板编程优点 1. 便携性强 - 可以随时随地携带平板进行编程&#xff0c;不受地点限制&#xff0c;方便在旅行、出差或休息时间进行学习和开发。 2. 直观的触摸操作 - 利用触摸屏幕进行代码编辑、缩放、拖动等操作&#xff0c;提供了一种直观和自然的交互方式。 …

TypeScript:高级类型

一、交叉类型&#xff08;Intersection Types&#xff09; 交叉类型是将多个类型合并为一个类型。 这让我们可以把现有的多种类型叠加到一起成为一种类型&#xff0c;它包含了所需的所有类型的特性。 例如&#xff0c; Person & Serializable & Loggable同时是 Person …

建模杂谈系列256 规则函数化改造

说明 之前尝试用FastAPI来构造规则&#xff0c;碰到的问题是由于请求量过大(TPS > 1000), 从而导致微服务端口资源耗尽。所以现在的point是: 1 如何使用函数来替代微服务(同时要保留使用微服务的优点)2 进一步抽象并规范规则的执行3 等效合并规则的方法 内容 0 机制讨论…

Vue2源码解读

vue源码_哔哩哔哩_bilibili 1.Vue源码路径目录解读 Vue2源码的路径目录被设计得非常清晰&#xff0c;每个文件夹都承担着特定的职责和功能。以下是这些主要文件夹&#xff08;compiler、core、platform、server、sfc、shared&#xff09;的详细解读&#xff1a; 1. compiler …

LLM大模型部署实战指南:Ollama简化流程,OpenLLM灵活部署,LocalAI本地优化,Dify赋能应用开发

1. Ollama 部署的本地模型(&#x1f53a;) Ollama 是一个开源框架&#xff0c;专为在本地机器上便捷部署和运行大型语言模型&#xff08;LLM&#xff09;而设计。&#xff0c;这是 Ollama 的官网地址&#xff1a;https://ollama.com/ 以下是其主要特点和功能概述&#xff1a; …

VLMEvalKit 评测实践:InternVL2 VS Qwen2VL

一、InternVL2简介 InternVL2是由上海人工智能实验室OpenGVLab发布的一款多模态大模型&#xff0c;其中文名称为“书生万象”。该模型在多学科问答&#xff08;MMMU&#xff09;任务上表现出色&#xff0c;成为国内首个在该任务上性能突破60的模型&#xff0c;被誉为开源多模态…

k8s 微服务 ingress-nginx 金丝雀发布

目录 一 什么是微服务 二 微服务的类型 三 ipvs模式 3.1 ipvs模式配置方式 四 微服务类型详解 4.1 clusterip 4.2 ClusterIP中的特殊模式headless 4.3 nodeport 4.4 loadbalancer 4.5 metalLB 4.6 externalname 五 Ingress-nginx 5.1 ingress-nginx功能 5.2 部署…

5. Python之数据类型

Python数据类型有数值型&#xff0c;字符串型&#xff0c;布尔型等等 内置函数type()&#xff0c;可以查看变量的数据类型 。 一、数值类型 整数&#xff08;没有小数部分&#xff0c;包含正整数&#xff0c;负整数&#xff0c;0&#xff0c;默认为十进制数&#xff09;&…

C++ 类域+类的对象大小

个人主页&#xff1a;Jason_from_China-CSDN博客 所属栏目&#xff1a;C系统性学习_Jason_from_China的博客-CSDN博客 所属栏目&#xff1a;C知识点的补充_Jason_from_China的博客-CSDN博客 概念概述 类定义了一个新的作用域&#xff0c;类的所有成员都在类的作用域中&#xff…

华为杯数学建模资料大全、入门指导攻略、获奖数据分析、选题建议

这里收集的资料个人认为已经非常全也非常值了&#xff0c;这么多资料收集成本真的不低 数学建模比赛资料部分&#xff08;需要私聊找我&#xff09; 华为杯创办以来每一年的比赛题目原题&#xff08;包括A到F题&#xff09;华为杯每年每种题目的优秀获奖作品论文 近几年的华…

2022高教社杯全国大学生数学建模竞赛C题 问题一(2) Python代码演示

目录 1.2 结合玻璃的类型,分析文物样品表面有无风化化学成分含量的统计规律数据预处理绘图热力图相关系数图百分比条形图箱线图小提琴图直方图KED图描述性统计分析偏度系数峰度系数其它统计量1.2 结合玻璃的类型,分析文物样品表面有无风化化学成分含量的统计规律 数据预处理 …

回归预测|基于鲸鱼优化随机森林数据的数据回归预测Matlab程序 多特征输入单输出WOA-RF

回归预测|基于鲸鱼优化随机森林数据的数据回归预测Matlab程序 多特征输入单输出WOA-RF 文章目录 一、基本原理鲸鱼优化算法&#xff08;WOA&#xff09;随机森林&#xff08;RF&#xff09;WOA-RF的结合总结 二、实验结果三、核心代码四、代码获取五、总结 一、基本原理 WOA-R…