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)
結(jié)果
輸出第一個:
["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集合的篩選計算取值總結(jié)
在我們?nèi)粘i_發(fā)過程中,有很多場景需要對list集合進行取值篩選,以下是我對常用的一些知識點進行總結(jié)
首先,創(chuàng)建一個需要用到的對象,例如學(xué)生對象,有相關(guān)字段:姓名,年齡,性別
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->{
//處理邏輯,打印出所有學(xué)生的姓名
System.out.println(student.getName());
});
運行結(jié)果:
2、篩選list
filter函數(shù)的()里,應(yīng)該放邏輯,判斷條件,將符合條件的放到resultList中
代碼如下,篩選集合中所有性別為女的學(xué)生
List resultList = list.stream().filter(student -> Objects.equals(student.getSex(),"女")).collect(Collectors.toList());
resultList.stream().forEach(student->{
System.out.println(student.getName());
});
運行結(jié)果:
3、list去重
根據(jù)性別去重
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());
});
運行結(jié)果:
4、取出list集合對象中某一個屬性
取出每個對象中的姓名組成一個新的集合
List listStr = list.stream().map(Student::getName).collect(Collectors.toList());
去重
List listNew = listStr .stream().map(Student::getName).distinct().collect(Collectors.toList());
運行結(jié)果:
5、list與map互轉(zhuǎn),并根據(jù)某一屬性進行分組
list轉(zhuǎn)map (下方studentMap運行會報錯,因為作為key值,name不能重復(fù),所以正式開發(fā)中應(yīng)該使用唯一性id作為key值)
Map studentMap = list.stream().collect(Collectors.toMap(Student::getName, student -> student));
list轉(zhuǎn)數(shù)組
String[] listStrs = list.stream()
.filter(e -> Objects.equals(e.getSex(), "男"))
.sorted(Comparator.comparing(Student::getName))
.map(Student::getName).toArray(String[]::new);
list轉(zhuǎn)map并且分組
Map> listMap = list.stream().collect(Collectors.groupingBy(Student::getSex));
運行結(jié)果:
根據(jù)對象某些屬性,進行分組
Map studentsMap= list.stream()
.collect(Collectors.groupingBy(f -> Arrays.asList(f.getAge),f.getSex())));
map轉(zhuǎn)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、根據(jù)某一屬性進行計算
根據(jù)年齡求最大值、最小值、平均值、總和、個數(shù)
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());
運行結(jié)果:
注意:
1、求和有三種類型,mapToInt,mapToLong,mapToDouble
2、如果是Bigdecimal數(shù)值類型,則計算方法如下,(新建對象)
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()進行強轉(zhuǎn)(int->Bigdecimal)
結(jié)語:本人目前用到這么多,希望各位有更好的或者其它的用法給予建議與評論,有錯誤也希望能得到指正!也希望大家多多支持龍方網(wǎng)絡(luò)。
————————————————
版權(quán)聲明:本文為CSDN博主「weixin_39702400」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/weixin_39702400/article/details/111895006
?
?
?
?
?
?
?
?
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的stream 提取某字段_java8从list集合中取出某一属性的值的集合案例的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何配置草莓营养液?
- 下一篇: mybatisplus 强制制空