java8從list集合中取出某一屬性的值的集合案例
我就廢話不多說(shuō)了,大家還是直接看代碼吧~
List<Order> list = new ArrayList<User>(); 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<String> orderNoList=list.stream().map(Order::getOrderNo).collect(Collectors.toList()); System.out.println("輸出單號(hào)集合:"+orderNoList); List<String> idList=list.stream().map(Order::getId()).collect(Collectors.toList()); System.out.println(idList)
結(jié)果
輸出第一個(gè):
["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; } }
補(bǔ)充知識(shí):java8快速對(duì)list集合的篩選計(jì)算取值總結(jié)
在我們?nèi)粘i_(kāi)發(fā)過(guò)程中,有很多場(chǎng)景需要對(duì)list集合進(jìn)行取值篩選,以下是我對(duì)常用的一些知識(shí)點(diǎn)進(jìn)行總結(jié)
首先,創(chuàng)建一個(gè)需要用到的對(duì)象,例如學(xué)生對(duì)象,有相關(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; } }
其次,對(duì)這些字段屬性進(jìn)行賦值
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<Student> list = new ArrayList<>(); list.add(s1); list.add(s2); list.add(s3); list.add(s4); list.add(s5);
1、遍歷-foreach
使用stream流進(jìn)行foreach遍歷
list.stream().forEach(student->{ //處理邏輯,打印出所有學(xué)生的姓名 System.out.println(student.getName()); });
運(yùn)行結(jié)果:
2、篩選list
filter函數(shù)的()里,應(yīng)該放邏輯,判斷條件,將符合條件的放到resultList中
代碼如下,篩選集合中所有性別為女的學(xué)生
List<Student> resultList = list.stream().filter(student -> Objects.equals(student.getSex(),"女")).collect(Collectors.toList()); resultList.stream().forEach(student->{ System.out.println(student.getName()); });
運(yùn)行結(jié)果:
3、list去重
根據(jù)性別去重
List<Student> 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()); });
運(yùn)行結(jié)果:
4、取出list集合對(duì)象中某一個(gè)屬性
取出每個(gè)對(duì)象中的姓名組成一個(gè)新的集合
List<String> listStr = list.stream().map(Student::getName).collect(Collectors.toList());
去重
List<String> listNew = listStr .stream().map(Student::getName).distinct().collect(Collectors.toList());
運(yùn)行結(jié)果:
5、list與map互轉(zhuǎn),并根據(jù)某一屬性進(jìn)行分組
list轉(zhuǎn)map (下方studentMap運(yùn)行會(huì)報(bào)錯(cuò),因?yàn)樽鳛閗ey值,name不能重復(fù),所以正式開(kāi)發(fā)中應(yīng)該使用唯一性id作為key值)
Map<String, Student> 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<String, List<Student>> listMap = list.stream().collect(Collectors.groupingBy(Student::getSex));
運(yùn)行結(jié)果:
根據(jù)對(duì)象某些屬性,進(jìn)行分組
Map<List, List> studentsMap= list.stream()
.collect(Collectors.groupingBy(f -> Arrays.asList(f.getAge),f.getSex())));
map轉(zhuǎn)list
List<Student> collect = studentMap.values().stream().collect(Collectors.toList());
6、過(guò)濾屬性為空的字段
Student s6 = new Student("",30,"男"); list.add(s6); List<String> stringList = list.stream().map(s -> s.getName()).filter(s -> !s.isEmpty()).collect(Collectors.toList());
7、根據(jù)某一屬性進(jìn)行計(jì)算
根據(jù)年齡求最大值、最小值、平均值、總和、個(gè)數(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());
運(yùn)行結(jié)果:
注意:
1、求和有三種類型,mapToInt,mapToLong,mapToDouble
2、如果是Bigdecimal數(shù)值類型,則計(jì)算方法如下,(新建對(duì)象)
Frult frult1 = new Frult("西瓜",new BigDecimal(1)); Frult frult2 = new Frult("梨子",new BigDecimal(2)); List<Frult> frultList = new ArrayList<>(); frultList.add(frult1); frultList.add(frult2); BigDecimal totalPrice = frultList.stream().map(Frult::getPrice).reduce(BigDecimal.ZERO, BigDecimal::add); //或者用mapToInt()進(jìn)行強(qiáng)轉(zhuǎn)(int->Bigdecimal)
結(jié)語(yǔ):本人目前用到這么多,希望各位有更好的或者其它的用法給予建議與評(píng)論,有錯(cuò)誤也希望能得到指正!也希望大家多多支持腳本之家。
- java list用法示例詳解
- Java中List與Map初始化的一些寫法分享
- JAVA中l(wèi)ist,set,數(shù)組之間的轉(zhuǎn)換詳解
- JSON的String字符串與Java的List列表對(duì)象的相互轉(zhuǎn)換
- JAVA ArrayList詳細(xì)介紹(示例)
- JAVA LinkedList和ArrayList的使用及性能分析
- java從list中取出對(duì)象并獲得其屬性值的方法
- Java List轉(zhuǎn)換成String數(shù)組幾種實(shí)現(xiàn)方式詳解
- java8實(shí)現(xiàn)list集合中按照某一個(gè)值相加求和,平均值等操作代碼
- 精通Java List 按字段提取對(duì)象
相關(guān)文章
Java服務(wù)剛啟動(dòng)時(shí)接口超時(shí)排查全過(guò)程
這篇文章主要為大家介紹了Java服務(wù)剛啟動(dòng)時(shí),一小波接口超時(shí)排查全過(guò)程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07java設(shè)計(jì)模式之建造者模式學(xué)習(xí)
建造者模式(Builder Pattern)主要用于“分步驟構(gòu)建一個(gè)復(fù)雜的對(duì)象”,在這其中“分步驟”是一個(gè)穩(wěn)定的算法,下面給出了詳細(xì)的示例2014-01-01SpringBoot使用Spring Security實(shí)現(xiàn)登錄注銷功能
這篇文章主要介紹了SpringBoot使用Spring Security實(shí)現(xiàn)登錄注銷功能,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2020-09-09Java?C++題解leetcode1441用棧操作構(gòu)建數(shù)組示例
這篇文章主要為大家介紹了Java?C++題解leetcode1441用棧操作構(gòu)建數(shù)組示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10Java中Object.wait()和LockSupport.park()的用法
Object.wait()和LockSupport.park()都是用來(lái)使當(dāng)前線程等待的方法,本文主要介紹了Java中Object.wait()和LockSupport.park()的用法,具有一定的參考價(jià)值,感興趣的可以了解一下2024-05-05Spring boot2+jpa+thymeleaf實(shí)現(xiàn)增刪改查
這篇文章主要介紹了Spring boot2+jpa+thymeleaf實(shí)現(xiàn)增刪改查,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04一文詳解如何通過(guò)Java實(shí)現(xiàn)SSL交互功能
這篇文章主要為大家詳細(xì)介紹了如何通過(guò)Java實(shí)現(xiàn)SSL交互功能,文中的示例代碼講解詳細(xì),對(duì)我們的學(xué)習(xí)或工作有一定的幫助,需要的可以參考一下2023-04-04