stream 提取某字段_java8从list集合中取出某一属性的值的集合案例

 

List orderNoList=list.stream().map(Order::getOrderNo).collect(Collectors.toList());

 

 

 

https://blog.csdn.net/weixin_39702400/article/details/111895006

 

 

我就废话不多说了,大家还是直接看代码吧~

List list = new ArrayList();

Order o1 = new Order("1","MCS-2019-1123");

list.add(o1 );

Order o2= new Order("2","MCS-2019-1124");

list.add(o2);

Order o3= new Order("3","MCS-2019-1125");

list.add(o3);

List orderNoList=list.stream().map(Order::getOrderNo).collect(Collectors.toList());

System.out.println("输出单号集合:"+orderNoList);

List idList=list.stream().map(Order::getId()).collect(Collectors.toList());

System.out.println(idList)

结果

输出第一个:

["MCS-2019-1123", "MCS-2019-1124", "MCS-2019-1125"]

[1, 2, 3]

order类:

public class Order{
String id;

String orderNo;

public Order(String id, String orderNo) {
this.id = id;

this.orderNo= orderNo;

}

public String getId() {
return id;

}

public void setId(String order) {
this.id= id;

}

public String getOrderNo() {
return orderNo;

}

public void setOrderNo(String message) {
this.orderNo= orderNo;

}

}

补充知识:java8快速对list集合的筛选计算取值总结

在我们日常开发过程中,有很多场景需要对list集合进行取值筛选,以下是我对常用的一些知识点进行总结

首先,创建一个需要用到的对象,例如学生对象,有相关字段:姓名,年龄,性别

public class Student {
private String name;

private int age;

private String sex;

public Student( String name, int age,String sex) {
this.age = age;

this.name = name;

this.sex = sex;

}

public String getName() {
return name;

}

public void setName(String name) {
this.name = name;

}

public int getAge() {
return age;

}

public void setAge(int age) {
this.age = age;

}

public String getSex() {
return sex;

}

public void setSex(String sex) {
this.sex = sex;

}

}

其次,对这些字段属性进行赋值

Student s1 = new Student("小金",20,"女");

Student s2 = new Student("小宋",21,"女");

Student s3 = new Student("小张",25,"男");

Student s4 = new Student("小王",27,"男");

Student s5 = new Student("小王",30,"未知");

List list = new ArrayList<>();

list.add(s1);

list.add(s2);

list.add(s3);

list.add(s4);

list.add(s5);

1、遍历-foreach

使用stream流进行foreach遍历

list.stream().forEach(student->{
//处理逻辑,打印出所有学生的姓名

System.out.println(student.getName());

});

运行结果:

2、筛选list

filter函数的()里,应该放逻辑,判断条件,将符合条件的放到resultList中

代码如下,筛选集合中所有性别为女的学生

List resultList = list.stream().filter(student -> Objects.equals(student.getSex(),"女")).collect(Collectors.toList());

resultList.stream().forEach(student->{
System.out.println(student.getName());

});

运行结果:

3、list去重

根据性别去重

List unique = list.stream().collect(Collectors.collectingAndThen(

Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(Student::getSex))), ArrayList::new));

unique.stream().forEach(student->{
System.out.println(student.getName());

});

运行结果:

4、取出list集合对象中某一个属性

取出每个对象中的姓名组成一个新的集合

List listStr = list.stream().map(Student::getName).collect(Collectors.toList());

去重

List listNew = listStr .stream().map(Student::getName).distinct().collect(Collectors.toList());

运行结果:

5、list与map互转,并根据某一属性进行分组

list转map (下方studentMap运行会报错,因为作为key值,name不能重复,所以正式开发中应该使用唯一性id作为key值)

Map studentMap = list.stream().collect(Collectors.toMap(Student::getName, student -> student));

list转数组

String[] listStrs = list.stream()

.filter(e -> Objects.equals(e.getSex(), "男"))

.sorted(Comparator.comparing(Student::getName))

.map(Student::getName).toArray(String[]::new);

list转map并且分组

Map> listMap = list.stream().collect(Collectors.groupingBy(Student::getSex));

运行结果:

根据对象某些属性,进行分组

Map studentsMap= list.stream()

.collect(Collectors.groupingBy(f -> Arrays.asList(f.getAge),f.getSex())));

map转list

List collect = studentMap.values().stream().collect(Collectors.toList());

6、过滤属性为空的字段

Student s6 = new Student("",30,"男");

list.add(s6);

List stringList = list.stream().map(s -> s.getName()).filter(s -> !s.isEmpty()).collect(Collectors.toList());

7、根据某一属性进行计算

根据年龄求最大值、最小值、平均值、总和、个数

IntSummaryStatistics resultNum = list.stream().mapToInt((item)->item.getAge()).summaryStatistics();

System.out.println("max:"+resultNum.getMax());

System.out.println("min:"+resultNum.getMin());

System.out.println("sum:"+resultNum.getSum());

System.out.println("average:"+resultNum.getAverage());

System.out.println("count:"+resultNum.getCount());

运行结果:

注意:

1、求和有三种类型,mapToInt,mapToLong,mapToDouble

2、如果是Bigdecimal数值类型,则计算方法如下,(新建对象)

Frult frult1 = new Frult("西瓜",new BigDecimal(1));

Frult frult2 = new Frult("梨子",new BigDecimal(2));

List frultList = new ArrayList<>();

frultList.add(frult1);

frultList.add(frult2);

BigDecimal totalPrice = frultList.stream().map(Frult::getPrice).reduce(BigDecimal.ZERO, BigDecimal::add);

//或者用mapToInt()进行强转(int->Bigdecimal)

结语:本人目前用到这么多,希望各位有更好的或者其它的用法给予建议与评论,有错误也希望能得到指正!也希望大家多多支持龙方网络。
————————————————
版权声明:本文为CSDN博主「weixin_39702400」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_39702400/article/details/111895006

 

 

 

 

 

 

 

 

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

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

相关文章

线程VS进程

什么是线程、什么是进程 在Java中要同时执行&#xff08;如果是单核&#xff0c;准确的说是交替执行&#xff09;多个任务&#xff0c;使用的是多线程&#xff0c;而要理解线程&#xff0c;我们先要了解什么是进程什么是线程。 一般的定义&#xff1a;进程是指在操作系统中正在…

Java架构师必须知道的 6 大设计原则

转载自 Java架构师必须知道的 6 大设计原则 在软件开发中&#xff0c;前人对软件系统的设计和开发总结了一些原则和模式&#xff0c; 不管用什么语言做开发&#xff0c;都将对我们系统设计和开发提供指导意义。本文主要将总结这些常见的原则&#xff0c;和具体阐述意义。 开发…

java实现人脸识别源码【含测试效果图】——Dao层(IUserDao)

/** * Title: IUserDao.java * Package org.dao * Description: TODO该方法的主要作用&#xff1a; * author A18ccms A18ccms_gmail_com * date 2017-9-22 下午8:51:34 * version V1.0 */ package org.dao;import org.entity.Users;/** * * 项目名称&#xff1a;te…

Flux --gt; Redux --gt; Redux React 入门 基础实例教程

本文的目的很简单&#xff0c;介绍Redux相关概念用法 及其在React项目中的基本使用 假设你会一些ES6、会一些React、有看过Redux相关的文章&#xff0c;这篇入门小文应该能帮助你理一下相关的知识 一般来说&#xff0c;推荐使用 ES6ReactWebpack 的开发模式&#xff0c;但Webpa…

mybatisplus 强制制空 空覆盖原来的字符串

ApiModelProperty(value "证件照片url") TableField(value "id_photo_url",fill FieldFill.UPDATE) private String idPhotoUrl; 方法一 Data EqualsAndHashCode(callSuper false) Accessors(chain true) TableName("base_party_member") A…

Callable和Future

它们俩其实挺有意思&#xff0c;在运行的时候各司其职&#xff0c;Callable产生结果&#xff0c;Future获取结果。 使用步骤如下&#xff1a; 创建 Callable 接口的实现类&#xff0c;并实现 call() 方法&#xff0c;该 call() 方法将作为线程执行体&#xff0c;并且有返回值…

java实现人脸识别源码【含测试效果图】——DaoImpl层(BaseDaoUtilImpl)

/*** */ package org.dao.impl;import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List;import org.dao.BaseDao; import org.entity.Users; import org.junit.Test;/*** * * 项目名称&#xff1a;test_BaseDao …

90 % Java 程序员被误导的一个性能优化策略

转载自 90 % Java 程序员被误导的一个性能优化策略 我们经常看到一些 Java 性能优化的书或者理念&#xff0c;说不要在循环内定义变量&#xff0c;这样会占用过多的内存影响性能&#xff0c;而要在循环外面定义。接触 Java 这么久以来&#xff0c;相信很多 Java 程序员都被这…

微软开源Visual Studio测试平台VSTest

IT之家1月21日消息 微软在MSDN博客上宣布&#xff0c;开源旗下Visual Studio测试平台VSTest。这一平台是具备高扩展性的单元测试执行框架&#xff0c;能够在不同的核心之间实现并行化&#xff0c;提供进程隔离&#xff0c;并能够整合进Visual Studio。 目前&#xff0c;VSTest能…

nacos 读取纯数字字符 出错 @value

ums: baseUrl: http://xxxx/xx/Api code: 00972315 纯数字要加单引号

java实现人脸识别源码【含测试效果图】——DaoImpl层(UserDaoImpl)

/** * Title: UserDaoImpl.java * Package org.dao.impl * Description: TODO该方法的主要作用&#xff1a; * author A18ccms A18ccms_gmail_com * date 2017-9-22 下午8:52:58 * version V1.0 */ package org.dao.impl;import org.dao.IUserDao; import org.entity.Use…

线程的状态与调度

当我们使用new关键字新建一个线程&#xff0c;这个时候线程就进入了新建状态&#xff08;New&#xff09;&#xff0c;也就是图中未启动状态&#xff1b;调用start方法启动线程&#xff0c;这个时候就进入了可运行状态&#xff0c;也就是就绪状态&#xff08;Runnable&#xff…

深入JVM系列(三)之类加载、类加载器、双亲委派机制与常见问题

转载自 深入JVM系列&#xff08;三&#xff09;之类加载、类加载器、双亲委派机制与常见问题 一&#xff0e;概述 定义&#xff1a;虚拟机把描述类的数据从Class文件加载到内存&#xff0c;并对数据进行校验、转换解析和初始化&#xff0c;最终形成可以被虚拟机直接使用的java…

Fabio 安装和简单使用

Fabio&#xff08;Go 语言&#xff09;&#xff1a;https://github.com/eBay/fabio Fabio 是一个快速、现代、zero-conf 负载均衡 HTTP(S) 路由器&#xff0c;用于部署 Consul 管理的微服务。 Fabio 由 eBay Classifieds Group 开发&#xff0c;用于处理 marktplaats.nl 和 kij…

java实现人脸识别源码【含测试效果图】——Service层(IUserService)

/** * Title: BaseService.java * Package org.service * Description: TODO该方法的主要作用&#xff1a; * author A18ccms A18ccms_gmail_com * date 2017-9-22 下午8:48:52 * version V1.0 */ package org.service;import org.entity.Users;/** * * 项目名称&am…

join()

join函数的定义是指&#xff1a;等待线程终止。 我们在运行线程的时候可能会遇到&#xff0c;在主线程中运行子线程&#xff0c;主线程需要获取子线程最终执行结果的情况。 但是有很多时候子线程进行了很多耗时的操作&#xff0c;主线程往往先于子线程结束&#xff0c;这个时…

计算密集型分布式内存存储和运算平台架构

1. 相关概念 1.1 内存数据库 关系型数据库处理永久、稳定的数据&#xff0c;内存数据库就是将其数据放在内存中&#xff0c;活动事务只与内存数据打交道&#xff0c;重新设计了体系结构并且在数据缓存、快速算法、并行操作方面也进行了相应的改进&#xff0c;所以数据处理速度比…

java中将Fri Feb 19 17:32:34 CST 2021时间格式转为yyyy-MM-dd HH:mm:ss时间格式

java中将Fri Feb 19 17:32:34 CST 2021时间格式转为yyyy-MM-dd HH:mm:ss时间格式 哈斗 2021-02-20 10:03:36 2034 收藏 6 分类专栏&#xff1a; java 文章标签&#xff1a; java 时间格式转换 版权 由于在项目中遇到此时间格式需要转换的问题&#xff0c;所以在此记录下转换…

java实现人脸识别源码【含测试效果图】——ServiceImpl层(UserServiceImpl)

/** * Title: BaseServiceImpl.java * Package org.service.impl * Description: TODO该方法的主要作用&#xff1a; * author A18ccms A18ccms_gmail_com * date 2017-9-22 下午8:50:26 * version V1.0 */ package org.service.impl;import org.dao.IUserDao; import or…

如何解决线程安全问题

如何解决线程安全问题 怎么解决线程的安全问题呢&#xff1f; 基本上所有解决线程安全问题的方式都是采用“序列化临界资源访问”的方式&#xff0c;即在同一时刻只有一个线程操作临界资源&#xff0c;操作完了才能让其他线程进行操作&#xff0c;也称作同步互斥访问。 在Ja…