Java開發:列表List的流操作

一、示例數據

  1、類結構

字段名稱 字段類型 字段備註
id Integer 唯一標識
score Double 分數
money BigDecimal 獎金

  2、列表初始化數據

  

id score money
1 96.0 5000
2 84.5 4000
3 70.0 3000
4 74.0 3000
5 82.0 4000

二、流操作

  1、求和

  int、double、long類型求和(哪種類型的就將mapTo方法更換爲對應的類型,括號裏爲類裏要求和的數據列,後綴是sum方法):

Double d = list.stream().mapToDouble(TestClass :: getScore).sum();

  BigDecimal類型求和:

BigDecimal b = list.stream().map(TestClass::getMoney).reduce(BigDecimal.ZERO,BigDecimal::add);

  2、篩選

  篩選單個:

TestClass testClassFindOne = list.stream().filter(testClass -> testClass.score == 70.0).findAny().orElse(null);

  篩選多個:

List<TestClass> testClassFindManyList = list.stream().filter(testClass -> testClass.score > 80.0).collect(Collectors.toList());

  篩選的時候都是使用filter方法,區別在於條件不同,單個屬性通過不同的判斷條件來判斷是否符合篩選條件。

  查單個時是使用精準匹配的條件,且使用findAny()在列表中提取出符合條件的元素,附加條件orElse(null)表示的是如果沒有查到符合條件的元素時,則返回空。

  查多個時往往是使用範圍性的條件,如大於小於或者存在重複數據時進行匹配,查詢完之後通過collect(Collectors.toList())進行組合,返回的是一個包含符合條件元素的列表,無符合條件的元素時爲空列表。

  3、遍歷

list.stream().forEach(testClass -> {
      xxxxxx();
});

  遍歷使用foreach方法,對列表中的每個元素執行操作。

  4、統計

Long count = list.stream().filter(testClass -> testClass.score > 80).count();

  統計使用count()方法進行計數並返回。

  5、分組

Map<Integer,List<TestClass>> testClassGroupList = list.stream().collect(Collectors.groupingBy(TestClass :: getId));

  分組通過Collectors.groupingBy進行,參數爲實體類裏的數據列,數據類型爲int。

  注:該方法進行分組時返回的Map類型默認爲HashMap,是沒有順序的。如果需要順序進行分組,可以添加設置LinkedHashMap

Map<Integer,List<TestClass>> testClassGroupList2 = list.stream().collect(Collectors.groupingBy(TestClass :: getId, LinkedHashMap::new,Collectors.toList()));

  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章