Java8中list集合的常用方法_java8 list-程序员宅基地

技术标签: java  Java基础  

1、检查list集合中是否存在某个值

一个list集合内有name,sex字段,需要判断list中是否有name有叫张三的人,如果有返回true

boolean b = list.stream().filter(m -> m.getName().equals("张三")).findAny().isPresent();
boolean b = list.stream().anyMatch(s -> s.getBuName().equals("张三33"));

2、获取不重复的list集合中的个数

//基本数据类型
List<Integer> list = Lists.newArrayList(1, 2, 1, 3);
long count = list.stream().distinct().count();
//对象
long count = list.stream().map(Student::getName).distinct().count();

3、list元素去重

//基本数据类型
List<String> newList = list.stream().distinct().collect(Collectors.toList());
//对象:根据单个元素去重
List<SkuHotNews> collect = list.stream().collect(
                Collectors.collectingAndThen(
                        Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(SkuHotNews::getBuId))), ArrayList::new));
//对象:根据两个元素去重
List<SkuHotNews> collect = list.stream().collect(
                Collectors.collectingAndThen(
                        Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(s -> s.getBuId() + ";" + s.getId()))), ArrayList::new));

4、list元素过滤

//filter里为true的留下,false的过滤掉
List<SkuHotNews> collect = list.stream().filter(s -> s.getBuName().equals("张三")).collect(Collectors.toList());

5、过滤list生成新的list

List<CusCommissionBo> simplePage = Lists.newArrayList();
    List<CusCommissionVo> commissionVoList = simplePage.stream()
		.filter((actCusCommissionBo) -> ActSceneEnum.SCENE_ONE.getCode().equals(actCusCommissionBo.getActType()))
		.map((actCusCommissionBo) -> {
    
            CusCommissionVo cusCommissionVo = new CusCommissionVo();
            return cusCommissionVo;
        }).collect(Collectors.toList());

6、分组

List<CheckGoodsMx> checkGoodsList; //不为空的数据List
//返回Map<依据实体类中某个属性分组的类型, List<实体类>>
// groupingBy(CheckGoodsMx::getDrcode)-groupingBy(实体类::getDrcode)
Map<String, List<CheckGoodsMx>> drcodeMap =checkGoodsList.stream().collect(
                Collectors.groupingBy(CheckGoodsMx::getDrcode));
//分组计数
Map<Long, Long> map = recordBoList.stream().collect(Collectors.groupingBy(GrabAssignRecordBo::getOriginalUserId, Collectors.counting()));
//分组求和
studentList.stream().collect(Collectors.toMap(Student::getName, Student::getScore, Integer::sum));

7、list转map

List<Apple> appleList = new ArrayList<>();//存放apple对象集合
 
Apple apple1 =  new Apple(1,"苹果1",new BigDecimal("3.25"),10);
Apple apple12 = new Apple(1,"苹果2",new BigDecimal("1.35"),20);
Apple apple2 =  new Apple(2,"香蕉",new BigDecimal("2.89"),30);
Apple apple3 =  new Apple(3,"荔枝",new BigDecimal("9.99"),40);
 
appleList.add(apple1);
appleList.add(apple12);
appleList.add(apple2);
appleList.add(apple3);

//转map:id为key,apple对象为value
Map<Integer, Apple> appleMap = appleList.stream().collect(Collectors.toMap(Apple::getId, a -> a,(k1,k2)->k1));
//单对单
Map<Long, BigDecimal> map = list.stream().collect(Collectors.toMap(SkuHotNews::getId, SkuHotNews::getBuId, (k1, k2) -> k2));

8、求和、最大值、最小值、平均值

double、int、long是一种方式,以long举例:

//求和
long sum = list.stream().mapToLong(SkuHotNews::getId).sum();
//最大值
long max = list.stream().mapToLong(SkuHotNews::getId).max().getAsLong();
//最小值
long min = list.stream().mapToLong(SkuHotNews::getId).min().getAsLong();
//平均值(没有指定几位小数,可以转成bigdecimal处理小数位数)
double avg = list.stream().mapToLong(SkuHotNews::getId).average().getAsDouble();
//一次获得:和、最大值、最小值、平均值
IntSummaryStatistics stats = ins.stream().mapToInt((x) -> x).summaryStatistics();
System.out.println("列表中最大的数 : " + stats.getMax());
System.out.println("列表中最小的数 : " + stats.getMin());
System.out.println("所有数之和 : " + stats.getSum());
System.out.println("平均数 : " + stats.getAverage());

bigdecimal是一种方式(都没有指定小数位数,正常需要指定):

private static final DecimalFormat df = new DecimalFormat("0.00");//保留两位小数点
//求和
BigDecimal add = list.stream().map(SkuHotNews::getBuId).reduce(BigDecimal.ZERO, BigDecimal::add);
String addStr = df.format(add);//保留两位小数并转成string
//最大值
BigDecimal max = list.stream().max((u1, u2) -> u1.getBuId().compareTo(u2.getBuId())).get().getBuId();
String maxStr = df.format(max);//保留两位小数并转成string
//最小值
BigDecimal min = list.stream().min((u1, u2) -> u1.getBuId().compareTo(u2.getBuId())).get().getBuId();
String minStr = df.format(min);//保留两位小数并转成string
//平均值
BigDecimal avg = list.stream().map(SkuHotNews::getBuId).reduce(BigDecimal.ZERO, BigDecimal::add).divide(new BigDecimal(list.size()));
String avgStr = df.format(avg);//保留两位小数并转成string

9、排序

//升序
List<SkuHotNews> collect = list.stream().sorted(Comparator.comparing(SkuHotNews::getBuId)).collect(Collectors.toList());
//降序
List<SkuHotNews> collect = list.stream().sorted(Comparator.comparing(SkuHotNews::getBuId).reversed()).collect(Collectors.toList());
//多条件排序
List<SkuHotNews> collect = list.stream().sorted(Comparator.comparing(SkuHotNews::getBuId).thenComparing(SkuHotNews::getId)).collect(Collectors.toList());

10、逗号分隔

list转成逗号分隔的字符串

String mergedString = strings.stream().filter(string -> !string.isEmpty()).collect(Collectors.joining(", "));
List<CaseColumnDictDTO> list;
String lineKsyStr= list.stream().map(CaseColumnDictDTO::getLineKey).collect(Collectors.joining(","));

11、集合与数组互转

数组转集合

String[] mailArray = emails.split(",");
List<String> receiveMailList = Stream.of(mailArray).collect(Collectors.toList());      

集合转数组

String[] strings = list.stream().toArray(String[]::new);
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_43496689/article/details/111631337

智能推荐

html整体居中文字,html文字居中 html图片居中代码-程序员宅基地

文章浏览阅读4.9k次,点赞3次,收藏5次。html文字居中�?a href="//www.css5.com.cn/html/352.shtml">html图片居中方法代码,通过在html中实现文字居中图片居中篇�?a href="//www.css5.com.cn/html/">html中实现文字图片内容居中有三种方法,其中两种使�?a href="//www.css5.com.cn/">CSS样式实现,一直使用原始的h..._整体居中代码

Linux中tty是什么(tty1~7)-程序员宅基地

文章浏览阅读5.2k次,点赞3次,收藏7次。tty:终端设备的统称。tty一词源于Teletypes,或者teletypewriters,原来指的是电传打字机,是通过串行线用打印机键盘通过阅读和发送信息的东西,后来这东西被键盘与显示器取代,所以现在叫终端比较合适。终端是一种字符型设备,它有多种类型,通常使用tty来简称各种类型的终端设备。tty1~6是文本型控制台,tty7是X Window图形显示管理器。在本地机器上..._linux tty10

【ESP8266之LUA开发】九、File操作,实现C#改变并存储工作模式,SSID与PWD的保存与读取_esp8266 configfile.close()-程序员宅基地

文章浏览阅读1.5k次。emmmm,这一片信息量很大,算是一个综合的过程吧,如果哪里有疑问记得及时查看前面的内容,查漏补缺。文件操作,保存数据,这样的话就可以随意修改启动时工作在哪一种模式,哪一种通信,以及其余需要保存在模块内部的信息。 就实现上位机软件的第一个功能,,修改启动模式 对应的C#代码private void button2_Click(object sender, EventArgs e)_esp8266 configfile.close()

【Unity】如何优雅地移动物体-8个方法_unity 物体移动-程序员宅基地

文章浏览阅读8.1k次,点赞58次,收藏136次。在游戏开发中,如何移动物体?是我们需要思考的事情。Unity 引擎也提供了众多的方法,每个开发者的使用习惯也各不相同,所以往往不是很清楚在这种场景下哪种方式最好的或者最有效的。那么,这篇文章,我想分享一下移动物体的一些方法和优缺点。_unity 物体移动

【Python】python 反射机制在实际的应用场景讲解-程序员宅基地

文章浏览阅读97次。 剖析python语言中 "反射" 机制的本质和实际应用场景一. 前言def s1(): print("s1是这个函数的名字!") s = "s1"print("%s是个字符串" % s)在上面的代码中,我们必须区分两个概念,f1和“f1"。前者是函数f1的函数名,后者只是一个叫”f1“的字符串,两者是不同的事物。我们可以用f1()的方式调用函数f1,但我们不能用"f..._python反射机制及应用场景

uni-app上传文件(带进度条)_uniapp 上传视频时显示进度-程序员宅基地

文章浏览阅读3.6k次。<template> <view> <view> <progress :percent="percent" stroke-width="10"></progress> </view> <view> <button type="primary" :loading="loading" :disabled="disabled" @click="upload">选择照片</button&g_uniapp 上传视频时显示进度

随便推点

美团面试—手撕numpy之fps点云最远点采样实现_python 最远点采样-程序员宅基地

文章浏览阅读5.2k次。FPS没有想到不按套路出牌的美团今早就撕了这个。点云最远点采样,从一堆点集中选出一些点,使得他们尽可能地远离。这样采样出来的点能比较好的表征整个轮廓。在pointnet++中就用到过。整体思路是:分别维护一个已选取和待选取的点云集合。先从点云集合中选出一个点,然后计算其余所有点到该点的距离,距离最大的那个点是下次要加入的点。当pick集合中有多个点时,距离的定义为到集合每个点距离中的最小距离。关于距离的计算:维护一个distance列表,对于每次pick出来的点,去更新distance。可以利用_python 最远点采样

【云原生 | 31】Docker运行实时流计算框架Apache Storm_这是因为docker compose目前只能保证容器的启动顺序,但是无法确保所依赖容器中的-程序员宅基地

文章浏览阅读2.9w次,点赞11次,收藏11次。Apache Storm是一个实时流计算框架,由Twitter在2014年正式开源,遵循Eclipse Public License 1.0。Storm基于Clojure等语言实现。_这是因为docker compose目前只能保证容器的启动顺序,但是无法确保所依赖容器中的

【转】微信小游戏开发总结-程序员宅基地

文章浏览阅读165次。小游戏是小程序的一个类目,小游戏是微信开放给小程序的更多的能力,让小程序开发者有了开发游戏的能力。小游戏没有WXSS、WXML、多页面等内容,但加了一些渲染、文件系统以及后台多线程的功能。小游戏的运行环境是小程序环境的扩展,基本思路也是封装必要的 WEB 接口提供给用户,尽可能追求和 WEB 同样的开发体验。小游戏在小程序环境的基础上提供了 WebGL 接口的封装..._h5 游戏 转 微信 weapp-adapter

公众号模板消息推送_公众号平台模板推送流程-程序员宅基地

文章浏览阅读365次。首先公众号和小程序需要在同一主体下需要在公众号“广告与服务”→“模板消息”中申请自己所需的模板需要在公众号“设置与开发”→“基本配置”拿到appid,appsecret及配置服务器对应的IP白名单其次推送需要推送人员关注该公众号且拿到该用户的openid进行推送最后点击模板消息进入小程序的话,还需要提供小程序的appid和path信息以上就是公众号推送的大致流程啦_公众号平台模板推送流程

python编程从入门到实践第五章习题_python快速编程入门第五章课后题-程序员宅基地

文章浏览阅读1.2k次。第五章讲的是if的一些用法,和C、C++相比,只是把当中的else if 换成了elif,其他逻辑等完全没有任何变化。总的来说还是没有任何难度的,只是每一个语句后面需要加一个“:”,这个是初学的时候特别容易遗漏的。好了,直接上代码:#5-1car = 'subaru'print("Is car == 'subaru'? I Predict True.")print(car=='subaru')..._python快速编程入门第五章课后题

基于SpringBoot的社区医院管理服务系统的设计与实现_基于springboot的社区医疗服务管理系统-程序员宅基地

文章浏览阅读1.3k次。因此,系统无疑给人们的生活带来了极大的方便,网络的应用让时间和距离不再是局限。通过前面的功能分析可以将社区医院管理服务系统的功能分为管理员、用户和医生三个部分,系统的主要功能包括首页、个人中心、用户管理、医生管理、预约医生管理、就诊信息管理、诊疗方案管理、病历信息管理、健康档案管理、费用信息管理、系统管理等内容。预约医生管理,在预约医生管理页面中可以对索引、预约编号、医生账号、医生姓名、预约时间、科室、用户账号、用户姓名、审核回复、审核状态、审核等内容进行详情、就诊、修改或删除等操作,如图5-21所示。_基于springboot的社区医疗服务管理系统