List使用Stream流進行集合Collection的各種運算匯總:對BigDecimal求和,某個字段的和、最大值、最小值、平均值,字段去重,過濾等


       寫Java接口的朋友都知道,Java 8的更新,經常會用到過濾 list<Object> 里的數據,本文就對List使用Stream流進行集合Collection的各種運算做一個匯總!

優勢:

       Stream 是對集合(Collection)對象功能的增強,它專注於對集合對象進行各種非常便利、高效的聚合操作,或者大批量數據操作。

       通常我們需要多行代碼才能完成的操作,借助於Stream流式處理可以很簡單的實現。

各種Stream流操作:

  • 過濾soList中Object的Name字段為空的情況
List<Object> soList = Lists.newArrayList();
List<Object> list = soList.stream().filter(item -> item.getName() != null).collect(Collectors.toList()); 
  • 取soList列表根據對象某個字段 去重
 List<Object> soList = Lists.newArrayList()

//distinct() 去重  
List<Integer> maxDueDayList2 = soList.stream().map(Object::getMaxDueDay).distinct().collect(Collectors.toList());
  • 計算一個List對象中某個字段總和
int total = list.stream().mapToInt(User::getAge).sum();
//上下等同
int ageSum = userList.stream().collect(Collectors.summingInt(User::getAge));
  • 計算一個List對象中某個字段的和、最大值、最小值、平均值、總個數
double doublesum = listUsers.stream().mapToDouble(Users::getAge).sum();//和
int intmax = listUsers.stream().mapToInt(Users::getAge).max().getAsInt();//最大
int intmin = listUsers.stream().mapToInt(Users::getAge).min().getAsInt();//最小
double avg = listUsers.stream().mapToDouble(Users::getAge).average().getAsDouble();//平均

//計算一個number類型的List對象
Integer[] integerArray = {1, 3, 5, 10, 18};
List<Integer> list = new ArrayList<>(Arrays.asList(integerArray));
IntSummaryStatistics summaryStatistics = list.stream().mapToInt((s) -> s).summaryStatistics();

System.out.println("總和:" + summaryStatistics.getSum());
System.out.println("平均數:" + summaryStatistics.getAverage());
System.out.println("總個數:" + summaryStatistics.getCount());
System.out.println("最大值:" + summaryStatistics.getMax());
System.out.println("最小值:" + summaryStatistics.getMin());
  • Java集合對象中的一個字段對其進行排序
Collections.sort(list, (o1, o2) -> o1.getCustomerCount() - o2.getCustomerCount());
List<Integer> ss = new ArrayList<>();
Collections.sort(ss, (o1, o2) -> (o1 - o2));
  • 取出list對象中的一個屬性 列
List<String> stIdList1 = stuList.stream().map(Student::getId).collect(Collectors.toList());
  • List使用Stream對BigDecimal求和方法
BigDecimal result = fileDatas.stream()
// 將user對象的age取出來map為Bigdecimal
.map(IpayRepayFileData::getTotalAmount)
// 使用reduce()聚合函數,實現累加器
.reduce(BigDecimal.ZERO,BigDecimal::add);

  reduce是一個終結操作,它能夠通過某一個方法,對元素進行削減操作。該操作的結果會放在一個Optional變量里返回。可以利用它來實現很多聚合方法比如count,max,min等。 

       T reduce(T identity, BinaryOperator accumulator);
       第一個參數是我們給出的初值,第二個參數是累加器,可以自己用實現接口完成想要的操作,這里使用Bigdecimal的add方法 最后reduce會返回計算后的結果

 

大家如果還有其他list的操作歡迎評論補充!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM