最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2020年08月17日 08:39:41   作者:馮小胖 Mini胖  
這篇文章主要介紹了java8實現(xiàn)list集合中按照某一個值相加求和,平均值等操作代碼,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

集合:

List<User> user = new User();

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

參數(shù)類型:

summarizingDouble 統(tǒng)計數(shù)據(jù)(double)狀態(tài), 其中包括count min max sum和平均值

summarizingInt 統(tǒng)計數(shù)據(jù)(int)狀態(tài), 其中包括count min max sum和平均值

summarizingLong 統(tǒng)計數(shù)據(jù)(long)狀態(tài), 其中包括count min max sum和平均值.

summingInt 求和 返回int類型

summingDouble 求和 返回double類型

summingLong 求和 返回long類型

counting 返回Stream的元素個數(shù)

averagingDouble 求平均值 返回double類型

averagingInt 求平均值 返回int類型

averagingLong 求平均值 返回long類型

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

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

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

Java8集合List排序、篩選

1. List

元素有序

元素可重復(fù)

1.1 ArrayList

動態(tài)數(shù)組實現(xiàn)

查詢快

增刪慢(末尾處也快)

1.2 LinkedList

鏈表實現(xiàn)

查詢慢

增刪快

1.3 ArrayList和LinkedList比較

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

ArrayList:

它的默認(rèn)初始化容量是10,每次擴容時候增加原先容量的一半,也就是變?yōu)樵瓉淼?.5倍。

LinkedList:

底層實現(xiàn)是雙向鏈表。

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

1.4 List過濾指定元素

1.4.1 準(zhǔn)備待測試的List

public class Message {
  private Long id;  //id

  private String msg; //消息

  private Date sendTime; //時間戳
  //省略get set
}
//返回一個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

 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過濾篩選

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去重

//使用distinct去重

List<String> distinctMsg = list.stream().map(Message::getMsg).distinct().collect(Collectors.toList());
distinctMsg.forEach(System.out::println);

1.4.4 使用toSet去重

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

1.5 使用Java8對List排序

1.5.1 單個字段排序

 private static void sortList(){
    List<Message> list = getMessageList();
    if (list != null && !list.isEmpty()){
      System.out.println("===排序前如下===");
      list.stream().forEach(item -> System.out.println(item));

      //根據(jù)Id升序排序
      list.sort((a, b) -> a.getId().compareTo(b.getId()));

      //根據(jù)Id升序排序(簡寫)
      list.sort(Comparator.comparing(Message::getId));

      //根據(jù)Id降序排序(簡寫)
      list.sort(Comparator.comparing(Message::getId).reversed());
      
      System.out.println("===排序后如下===");
      list.stream().forEach(item -> System.out.println(item));
    }
  }

1.5.2 多個字段組合排序

private static void sortList(){
  List<Message> list = getMessageList();
  if (list != null && !list.isEmpty()){
    System.out.println("===排序前如下===");
    list.stream().forEach(item -> System.out.println(item));

    //根據(jù)多條件組合排序,先根據(jù)msg(升序),再根據(jù)id(升序)
    list.sort(Comparator.comparing(Message:: getMsg).thenComparing(Message::getId));

    //根據(jù)多條件組合排序,先根據(jù)msg(升序),再根據(jù)id(降序)
    list.sort(Comparator.comparing(Message:: getMsg).thenComparing(Comparator.comparing(Message::getId).reversed()));

    //根據(jù)多條件組合排序,先根據(jù)msg(降序),再根據(jù)id(降序)
    list.sort(Comparator.comparing(Message:: getMsg).thenComparing(Message::getId).reversed());

    //根據(jù)多條件組合排序,先根據(jù)msg(降序),再根據(jù)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>轉(zhuǎn)List<Object>

List<Long> idList =

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

1.6.1 List<T>轉(zhuǎn)List<Object> +去重

//利用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>轉(zhuǎn)Map<String, T>

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

 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"的數(shù)據(jù),轉(zhuǎn)map后取第一條

1.7.1 forEach遍歷Map

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

1.8 List<T>轉(zhuǎn)Map<String, List<T>>

Map<String, List<Message>> groupByMsg = list.stream().collect(groupingBy(Message::getMsg));

groupByMsg.forEach((k, v) -> {
   System.out.println(k + " -> " + v.toString());
});

返回如下:

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>>轉(zhuǎn)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求和、求最大值、平均值

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實現(xiàn)list集合中按照某一個值相加求和,平均值等操作代碼就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • springboot?yml配置文件值注入方式

    springboot?yml配置文件值注入方式

    這篇文章主要介紹了springboot?yml配置文件值注入方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • Spring的@Configuration使用與原理

    Spring的@Configuration使用與原理

    這篇文章主要介紹了Spring的@Configuration使用與原理,@Configuration用于定義配置類,可替換xml配置文件,被注解的類內(nèi)部包含有一個或多個被@Bean注解的方法,需要的朋友可以參考下
    2023-05-05
  • Junit單元測試關(guān)于@Transactional注解引起的事務(wù)回滾問題

    Junit單元測試關(guān)于@Transactional注解引起的事務(wù)回滾問題

    這篇文章主要介紹了Junit單元測試關(guān)于@Transactional注解引起的事務(wù)回滾問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • 解讀@ConfigurationProperties的基本用法

    解讀@ConfigurationProperties的基本用法

    這篇文章主要介紹了@ConfigurationProperties的基本用法,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-03-03
  • 深度理解Java訪問修飾符

    深度理解Java訪問修飾符

    今天帶大家學(xué)習(xí)的是Java的相關(guān)知識,文章圍繞著Java訪問修飾符展開,有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下
    2021-06-06
  • Mybatis Order by動態(tài)參數(shù)防注入方式

    Mybatis Order by動態(tài)參數(shù)防注入方式

    這篇文章主要介紹了Mybatis Order by動態(tài)參數(shù)防注入方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • Java NIO框架Netty簡單使用的示例

    Java NIO框架Netty簡單使用的示例

    本篇文章主要介紹了Java NIO框架Netty簡單使用的示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-12-12
  • Spring Boot中擴展XML請求與響應(yīng)的支持詳解

    Spring Boot中擴展XML請求與響應(yīng)的支持詳解

    這篇文章主要給大家介紹了關(guān)于Spring Boot中擴展XML請求與響應(yīng)的支持的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-09-09
  • 教你使用eclipse?搭建Swt?環(huán)境的全過程

    教你使用eclipse?搭建Swt?環(huán)境的全過程

    本文給大家分享使用eclipse?搭建Swt?環(huán)境的全過程,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-12-12
  • Java中static和static?final的區(qū)別詳解

    Java中static和static?final的區(qū)別詳解

    這篇文章主要介紹了Java中static和static?final的區(qū)別詳解,開發(fā)時我們經(jīng)常用到static以及static?final來修飾我們的字段變量,那么他們到底有什么區(qū)別呢?其實他們的區(qū)別可以用使用字節(jié)碼文件來解析,需要的朋友可以參考下
    2023-10-10

最新評論

思茅市| 太谷县| 郸城县| 乡宁县| 南乐县| 枣阳市| 巴楚县| 石河子市| 安图县| 颍上县| 双辽市| 临沂市| 如皋市| 阿克苏市| 广汉市| 修武县| 仙游县| 湟源县| 乌拉特中旗| 泰来县| 大厂| 南丹县| 峡江县| 长阳| 武宣县| 江阴市| 随州市| 历史| 韩城市| 河东区| 芜湖县| 广州市| 潼关县| 新和县| 临漳县| 乐陵市| 民权县| 新野县| 自治县| 尼木县| 怀仁县|