欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

集合:

List<User> user = new User();

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

參數(shù)類型:

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

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

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

summingInt 求和 返回int類型

summingDouble 求和 返回double類型

summingLong 求和 返回long類型

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

averagingDouble 求平均值 返回double類型

averagingInt 求平均值 返回int類型

averagingLong 求平均值 返回long類型

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

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

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

Java8集合List排序、篩選

1. List

元素有序

元素可重復(fù)

1.1 ArrayList

動(dòng)態(tài)數(shù)組實(shí)現(xiàn)

查詢快

增刪慢(末尾處也快)

1.2 LinkedList

鏈表實(shí)現(xiàn)

查詢慢

增刪快

1.3 ArrayList和LinkedList比較

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

ArrayList:

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

LinkedList:

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

在增加和刪除元素時(shí)效率較高。

1.4 List過濾指定元素

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

public class Message {
  private Long id;  //id

  private String msg; //消息

  private Date sendTime; //時(shí)間戳
  //省略get set
}
//返回一個(gè)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 單個(gè)字段排序

 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 多個(gè)字段組合排序

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ù)就用第一個(gè).

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

相關(guān)文章

  • 淺談對于DAO設(shè)計(jì)模式的理解

    淺談對于DAO設(shè)計(jì)模式的理解

    這篇文章主要介紹了淺談對于DAO設(shè)計(jì)模式的理解,小編覺得挺不錯(cuò)的,這里分享給大家,供需要的朋友參考。
    2017-10-10
  • Java?Bean轉(zhuǎn)Map的那些踩坑實(shí)戰(zhàn)

    Java?Bean轉(zhuǎn)Map的那些踩坑實(shí)戰(zhàn)

    項(xiàng)目中有時(shí)會(huì)遇到Map轉(zhuǎn)Bean,Bean轉(zhuǎn)Map的情況,下面這篇文章主要給大家介紹了關(guān)于Java?Bean轉(zhuǎn)Map那些踩坑的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-07-07
  • java中元素排序Comparable和Comparator的區(qū)別

    java中元素排序Comparable和Comparator的區(qū)別

    本文主要介紹了java中元素排序Comparable和Comparator的區(qū)別,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • 基于Consumer接口、Predicate接口初使用

    基于Consumer接口、Predicate接口初使用

    這篇文章主要介紹了Consumer接口、Predicate接口初使用方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • spring緩存代碼詳解

    spring緩存代碼詳解

    這篇文章主要介紹了spring緩存代碼詳解,分享了相關(guān)代碼示例,小編覺得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-02-02
  • Spring詳細(xì)講解FactoryBean接口的使用

    Spring詳細(xì)講解FactoryBean接口的使用

    這篇文章主要為大家介紹了Spring容器FactoryBean工廠實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • Java實(shí)戰(zhàn)之王者榮耀的英雄是怎么產(chǎn)生的?

    Java實(shí)戰(zhàn)之王者榮耀的英雄是怎么產(chǎn)生的?

    這篇文章主要介紹了Java實(shí)戰(zhàn)之王者榮耀的英雄是怎么產(chǎn)生的?文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)java的小伙伴們有很好地幫助,需要的朋友可以參考下
    2021-05-05
  • Idea設(shè)置全局highlighting?level為Syntax問題

    Idea設(shè)置全局highlighting?level為Syntax問題

    這篇文章主要介紹了Idea設(shè)置全局highlighting?level為Syntax問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • Java 在PDF中繪制形狀的兩種方法

    Java 在PDF中繪制形狀的兩種方法

    這篇文章主要介紹了Java 在 PDF 中繪制形狀的兩種實(shí)現(xiàn)方法,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • Java枚舉(enum) 詳解7種常見的用法

    Java枚舉(enum) 詳解7種常見的用法

    這篇文章主要介紹了Java枚舉(enum) 詳解7種常見的用法,具有一定的參考價(jià)值,有需要的可以了解一下。
    2016-11-11

最新評論