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
stream 提取某字段_java8从list集合中取出某一属性的值的集合案例相关推荐
- list中抽出某一个字段的值_java8从list集合中取出某一属性的值的集合案例
我就废话不多说了,大家还是直接看代码吧~ List list = new ArrayList(); Order o1 = new Order("1","MCS-2019- ...
- java11从list中取出某个属性_java8从list集合中取出某一属性的值的集合案例
我就废话不多说了,大家还是直接看代码吧~ List list = new ArrayList(); Order o1 = new Order("1","MCS-2019- ...
- java8之list集合中取出某一属性的方法
上代码 List<User> list = new ArrayList<User>();User user1 = new User("第一位"," ...
- java listt add_Java8 使用流抽取ListT集合中T的某个属性操作
免费资源网 - https://freexyz.cn/ 在java开发中,我们经常会遇到需要从一个集合中,抽取集合中元素的某一个属性.在java8之前,我们通常采用for循环去获取,但java8之后我 ...
- List集合中的对象根据属性排序
List集合中的对象根据属性排序 集合类List存放的数据,默认是按照放入时的顺序存放的,比如依次放入A.B.C,则取得时候,则也是A.B.C的顺序,实际场景中,有时我们需要根据自定义的规则对List ...
- 有3个集合, 从其中一个集合中删除同时存在于另外两个集合的元素
如下分享的邮件,在博客园做个记录,以便以后使用. 在这里,其实也想倡导一下程序员要具有的分享精神.鼓励大家多分享,平时有什么新的收获,最好在team里做个分享 .分享也是一种很好的事情.对团队来说,可 ...
- c语言两个线性表la lb,有两个集合用两个线性表LA和LB表示即线性表中的数据元素即为集合中的成员现要求一个新的集合...
<有两个集合用两个线性表LA和LB表示即线性表中的数据元素即为集合中的成员现要求一个新的集合>由会员分享,可在线阅读,更多相关<有两个集合用两个线性表LA和LB表示即线性表中的数据元 ...
- PropertyGrid 绑定动态的属性与值的集合
建立下面3个类: XProp XPropDescriptor XProps 建立Class XProp XProp 就是用户将具体使用的属性.PropertyGrid 很炫的一点就是属性的定制可以有很 ...
- java map替换_在java的Map集合中,怎样更改value的值
展开全部 map集合没有专门更改value的方法,更改value的方法就是636f70793231313335323631343130323136353331333436316363map.put(k ...
最新文章
- python学习手册中文版免费下载-python学习手册下载|
- Eclipse+Tomcat7.0+MySQL 连接池设置
- Kernel Method的理解
- 修改MOSS2007内容查询部件实现自定义格式显示
- JBoss Forge NetBeans集成–入门
- android 对话框 图片,android – AlertDialog按钮的图像
- gitee自动部署的使用
- 佩斯大学计算机科学世界排名,美国佩斯大学留学推荐 计算机科学专业
- 判断是否为ajax请求
- java 字符串 常量_Java进阶——Java中的字符串常量池
- matlab与r语言函数对照表,R语言与matlab循环时间对比
- STM32学习笔记(十) CAN通讯测试(环回模式)
- javascript 的 split用法
- 统计学附录,F分布和t分布表
- H3CSE园区-Smart Link和Monitor Link
- Power Query 系列 (04) - 从 Web 导入数据
- gif透明背景动画_如何利用premiere制作GIF动态图片
- 重装系统之制作U盘启动盘 - 一盘通装
- 计算机专业同学综合自我评估,计算机专业学生个人自我评价
- Crime and Punishment
热门文章
- 循环队列 队空、队满 条件
- PAT(乙级) 1001 害死人不偿命的(3n+1)猜想 C++
- P4721 【模板】分治 FFT
- Codeforces Round #590 (Div. 3) E. Special Permutations 差分 + 思维
- Codeforces Round #712 (Div. 2) D. 3-Coloring 交互 构造
- Defend Your Country
- Rabbit的工作(2)
- P5056-[模板]插头dp
- 洛谷P3845-球赛【离散化,贪心】
- 【2018.4.7】模拟赛之三-ssl2384 字符串【字符串】