一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - java8實現list集合中按照某一個值相加求和,平均值等操作代碼

java8實現list集合中按照某一個值相加求和,平均值等操作代碼

2020-08-17 12:04馮小胖 Mini胖 Java教程

這篇文章主要介紹了java8實現list集合中按照某一個值相加求和,平均值等操作代碼,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

集合:

List<User> user = new User();

user .stream().collect(Collectors.summingInt(User::getAge))

參數類型:

summarizingDouble 統計數據(double)狀態, 其中包括count min max sum和平均值

summarizingInt 統計數據(int)狀態, 其中包括count min max sum和平均值

summarizingLong 統計數據(long)狀態, 其中包括count min max sum和平均值.

summingInt 求和 返回int類型

summingDouble 求和 返回double類型

summingLong 求和 返回long類型

counting 返回Stream的元素個數

averagingDouble 求平均值 返回double類型

averagingInt 求平均值 返回int類型

averagingLong 求平均值 返回long類型

maxBy 在指定條件下,返回最大值

minBy 在指定條件下,返回最小值

補充知識:Java8集合List排序、篩選、求和、求最大值、平均值、List轉Map

Java8集合List排序、篩選

1. List

元素有序

元素可重復

1.1 ArrayList

動態數組實現

查詢快

增刪慢(末尾處也快)

1.2 LinkedList

鏈表實現

查詢慢

增刪快

1.3 ArrayList和LinkedList比較

  實現 查詢 增刪 線程安全?
ArrayList 動態數組 慢(末尾處也快) 不安全
LinkedList 鏈表 不安全

ArrayList:

它的默認初始化容量是10,每次擴容時候增加原先容量的一半,也就是變為原來的1.5倍。

LinkedList:

底層實現是雙向鏈表。

在增加和刪除元素時效率較高。

1.4 List過濾指定元素

1.4.1 準備待測試的List

?
1
2
3
4
5
6
7
8
public class Message {
  private Long id;  //id
 
  private String msg; //消息
 
  private Date sendTime; //時間戳
  //省略get set
}
?
1
2
3
4
5
6
7
8
9
//返回一個List
private static List<Message> getMessageList(){
    List<Message> list = new ArrayList<>();
    list.add(new Message(1L, "a", new Date()));
    list.add(new Message(2L, "b", new Date()));
    list.add(new Message(4L, "b", new Date()));
    list.add(new Message(3L, "c", new Date()));
    return list;
  }

1.4.2 使用Iterator遍歷List

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
private static void TestArrayList(){
    List<Message> list = getMessageList();
    System.out.print("刪除前:");
    list.stream().forEach(item -> System.out.print(item));
 
    Iterator<Message> it = list.iterator();
    while (it.hasNext()) {
      Message s = it.next();
      if (s.getMsg().equals("b")) {
        it.remove();
      }
    }
 
    System.out.print("\n刪除后:");
    list.stream().forEach(item -> System.out.print(item));
}

1.4.2 使用Java8對List過濾篩選

?
1
2
3
4
5
6
private static void filterList(){
  List<Message> list1 = getMessageList();
  //過濾所有msg是b的記錄
  List<Message> list2 = list1.stream().filter(s -> !s.getMsg().equals("b")).collect(Collectors.toList());
  list2.stream().forEach(item -> System.out.println(item));
}

1.4.3 使用distinct去重

?
1
2
3
4
//使用distinct去重
 
List<String> distinctMsg = list.stream().map(Message::getMsg).distinct().collect(Collectors.toList());
distinctMsg.forEach(System.out::println);

1.4.4 使用toSet去重

?
1
2
3
//使用collect(toSet())去重
Set<String> distinctMsg2 = list.stream().map(Message::getMsg).collect(toSet());
distinctMsg2.forEach(System.out::println);

1.5 使用Java8對List排序

1.5.1 單個字段排序

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
private static void sortList(){
   List<Message> list = getMessageList();
   if (list != null && !list.isEmpty()){
     System.out.println("===排序前如下===");
     list.stream().forEach(item -> System.out.println(item));
 
     //根據Id升序排序
     list.sort((a, b) -> a.getId().compareTo(b.getId()));
 
     //根據Id升序排序(簡寫)
     list.sort(Comparator.comparing(Message::getId));
 
     //根據Id降序排序(簡寫)
     list.sort(Comparator.comparing(Message::getId).reversed());
     
     System.out.println("===排序后如下===");
     list.stream().forEach(item -> System.out.println(item));
   }
 }

1.5.2 多個字段組合排序

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
private static void sortList(){
  List<Message> list = getMessageList();
  if (list != null && !list.isEmpty()){
    System.out.println("===排序前如下===");
    list.stream().forEach(item -> System.out.println(item));
 
    //根據多條件組合排序,先根據msg(升序),再根據id(升序)
    list.sort(Comparator.comparing(Message:: getMsg).thenComparing(Message::getId));
 
    //根據多條件組合排序,先根據msg(升序),再根據id(降序)
    list.sort(Comparator.comparing(Message:: getMsg).thenComparing(Comparator.comparing(Message::getId).reversed()));
 
    //根據多條件組合排序,先根據msg(降序),再根據id(降序)
    list.sort(Comparator.comparing(Message:: getMsg).thenComparing(Message::getId).reversed());
 
    //根據多條件組合排序,先根據msg(降序),再根據id(升序)
    list.sort(Comparator.comparing(Message:: getMsg).reversed().thenComparing(Message::getId));
 
    System.out.println("===排序后如下===");
    list.stream().forEach(item -> System.out.println(item));
  }
}

1.6 List<T>轉List<Object>

List<Long> idList =

list.stream().map(Message::getId).collect(Collectors.toList());

1.6.1 List<T>轉List<Object> +去重

?
1
2
3
4
5
6
7
//利用distinct()
List<String> msgList =
list.stream().map(Message::getMsg).distinct().collect(Collectors.toList());
 
//利用Collectors.toSet()
Set<String> msgList2 =
list.stream().map(Message::getMsg).collect(Collectors.toSet());

1.7 List<T>轉Map<String, T>

還是上面的測試數據,按Message的msg作為key,如果key重復就用第一個.

?
1
2
3
4
5
6
private static void listToMap(){
  List<Message> list = getMessageList();
  Map<String, Message> map =
   list.stream().collect(Collectors.toMap(Message :: getMsg, a-> a, (k1, k2) -> k1));
  System.out.println(map.size());
}

原本List有4個元素,因為有2條msg="b"的數據,轉map后取第一條

java8實現list集合中按照某一個值相加求和,平均值等操作代碼

1.7.1 forEach遍歷Map

?
1
2
3
map.forEach((k,v) -> {
  System.out.println(k + " -> " + v);
});

1.8 List<T>轉Map<String, List<T>>

?
1
2
3
4
5
Map<String, List<Message>> groupByMsg = list.stream().collect(groupingBy(Message::getMsg));
 
groupByMsg.forEach((k, v) -> {
   System.out.println(k + " -> " + v.toString());
});

返回如下:

?
1
2
3
a -> [Message(id=1, msg=a, sendTime=Fri May 15 17:36:30 CST 2020)]
b -> [Message(id=2, msg=b, sendTime=Fri May 15 17:36:30 CST 2020), Message(id=4, msg=b, sendTime=Fri May 15 17:36:30 CST 2020)]
c -> [Message(id=3, msg=c, sendTime=Fri May 15 17:36:30 CST 2020)]

1.9 List<Map<String, Object>>轉Map<String, List<Map<String, Object>>>

Map<String, List<Map<String, Object>>> groupByGenderMap =

pigMapList.stream().collect(groupingBy(e -> e.get("gender").toString()));

1.10 List求和、求最大值、平均值

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
private static void statisticsList(){
    List<Message> list = getMessageList();
    //求和
    Long sum= list.stream().mapToLong(Message::getId).sum();
    System.out.println("sum = " + sum);
 
    //求最大值
    Optional<Message> maxMassage = list.stream().collect(Collectors.maxBy(Comparator.comparing(Message::getId)));
    Long maxId = maxMassage.get().getId();
    System.out.println("maxId = " + maxId);
 
 
    LongSummaryStatistics lss = list.stream().collect(Collectors.summarizingLong(Message::getId));
    System.out.println("sum = " + lss.getSum());
    System.out.println("max = " + lss.getMax());
    System.out.println("min = " + lss.getMin());
    System.out.println("avg = " + lss.getAverage());
}

以上這篇java8實現list集合中按照某一個值相加求和,平均值等操作代碼就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持服務器之家。

原文鏈接:https://blog.csdn.net/F_Z_S/article/details/103510180

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 日本在线视频免费观看 | 国色天香社区在线视频播放 | 日本免费看 | 亚洲va天堂va国产va久久 | 日本免费一区二区三区 | 久久国产精品永久免费网站 | 视频精品一区二区三区 | 无码国产成人午夜在线观看不卡 | pppd在线播放| 午夜福利合集1000在线 | www亚洲视频| 精品在线网站 | 国产亚洲精品一区在线播 | 精品久久香蕉国产线看观看麻豆 | 动态图啪啪120秒免费看 | 国产精品一级香蕉一区 | 香港日本三级亚洲三级 | 久久国产乱子伦精品免费不卡 | 日产2021免费一二三四区 | 7777奇米影视 | 精品日韩欧美一区二区三区 | 四虎影视在线影院在线观看 | 日本在线看免费 | 久久久久999 | 亚洲国产精品久久久久久网站 | 男人疯狂擦进女人下面 | 亚洲精品私拍国产福利在线 | 国产精品久久毛片完整版 | 顶级尤物极品女神福利视频 | 秋葵视频成人 | 青青草原社区 | 免费特黄一级欧美大片 | 满溢游泳池免费土豪全集下拉版 | 亚洲精品高清中文字幕完整版 | 成人影院www在线观看 | 午夜爱 | 好大好硬好紧太深了受不了 | 99re热这里只有精品 | 日本不卡在线一区二区三区视频 | 短篇最污的乱淫伦小说全集 | 性xxxxxxx18老师 |