list中抽出某一个字段的值_java8从list集合中取出某一属性的值的集合案例
我就废话不多说了,大家还是直接看代码吧~
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)
结语:本人目前用到这么多,希望各位有更好的或者其它的用法给予建议与评论,有错误也希望能得到指正!也希望大家多多支持云海天教程。
原文链接:https://blog.csdn.net/Hedy17/article/details/88838801
list中抽出某一个字段的值_java8从list集合中取出某一属性的值的集合案例相关推荐
- list中抽出某一个字段的值_Java的stream代替List解决单线程等问题
日常开发中,项目中存在大量的如下的代码: 对了,先介绍一下lambda表达式 private void testLambda() { List list = new ArrayList(); //循环 ...
- list中抽出某一个字段的值_使用LINQ获取List列表中的某个字段值
使用LINQ获取列表中的某个字段值,下面以获取员工列表中的编号字段为例子. 1.使用Select方法 1 List emplayeeList = GetEmplayeeList(); //获取员工信息 ...
- mysql触发器 当记录的指定字段发生变化时,更新表中的另外一个字段,或者更新另外一张关联表中关联记录的字段...
2019独角兽企业重金招聘Python工程师标准>>> 注意:语句中出现的old,new,now(),都为数据库自带的关键字,此处不做解释. 两种情况: 第一种:一张表中,更新某条记 ...
- java中list里面存放map,根据map中的某一个字段进行排序
Java中list里面存放map,根据map中的某一个字段进行排序 例如: [java] view plaincopy package com; import java.util.ArrayList; ...
- 恺撒密码是古罗马恺撒大帝用来对军事情报进行加解密的算法,它采用了替换方法对信息中的每一个英文字符循环替换为字母表序列中该字符后面的第三个字符,即,字母表的对应关系如下:
题目: 恺撒密码是古罗马恺撒大帝用来对军事情报进行加解密的算法,它采用了替换方法对信息中的每一个英文字符循环替换为字母表序列中该字符后面的第三个字符,即,字母表的对应关系如下: 原文:A B C D ...
- 小程序如何修改缓存中的某一个字段的值;小程序中如何应用vant组件 如:van-dropdown-item、van-field
1.小程序如何往缓存中存数据 将数据放入指定缓存中. 这里缓存块的名称叫'mydata',你可以根据自己的需求,取合适的名字.代码如下 let data = {name: '8BQ了',age: '1 ...
- stream 提取某字段_java8从list集合中取出某一属性的值的集合案例
List orderNoList=list.stream().map(Order::getOrderNo).collect(Collectors.toList()); https://blog.csd ...
- 在数据库中如何新增一个字段?
工作中常会用到:交给测试时,会让交付新增的字段的SQL语句. 如何在数据库中新增一个字段: alter TABLE t_Execution(表名) add FIsModifyQuote(列名) int ...
- SAP ABAP ALV控制显示的网格中的每一个字段属性
字段目录是用来控制ALV显示的网格中每个字段的属性的,比如字段的顺序,对齐方式,可编辑状态,颜色,等等.常用的字段如下: row_pos:默认值为0,可选值为1.2.3,既最大分3级别显示 field ...
最新文章
- 以下选项不是python文件读操作的是-以下选项不是Python文件读操作的是(____)。...
- spring入门(11)-spring与hibernate整合完成增删改查的操作(封装HibernateTemplate模版类对象)
- double类型怎么取余_数据类型和运算符
- Nuxt使用高德地图
- python——Tkinter图形化界面及threading多线程
- 小学期Deadline之GEC6818点奶茶系统
- 如何进入腾讯、网易、阿里这样的互联网公司,看到第二条我就秒懂了~
- 利用Hownet进行语义相似度计算的类(
- 2020年“华为杯”中国研究生数学建模竞赛题目及简单分析
- 数据科学、机器学习和数据挖掘的差异
- 5G的前传和回传是什么
- Http的三次握手与四次挥手的流程:SYN包--同步包 ACK包--应答包 FIN包--终止包
- AD在PCB设计中导入LOGO
- 2019 年第 25 周 DApp 影响力排行榜 | TokenInsight
- 用PS绘出真实火焰效果
- Excel·VBA工作簿拆分所有工作表单独保存
- 《历》·陕西帝王陵寝一览
- 网络监控器mrtg全攻略
- 关于搜索引擎及其开发
- 简单几步实现网络音乐播放器(Python爬虫版百度FM)