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

java8 stream自定義分組求和并排序的實(shí)現(xiàn)

 更新時(shí)間:2020年01月24日 08:44:40   作者:shuangyueliao  
這篇文章主要介紹了java8 stream自定義分組求和并排序的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

本文主要介紹了java8 stream自定義分組求和并排序的實(shí)現(xiàn),分享給大家,具體如下:

  public static void main(String[] args) {
    List<GroupDetailDTO> list = new ArrayList<>();
    GroupDetailDTO dto1 = new GroupDetailDTO();
    dto1.setHeadsetId(1);
    dto1.setTime("2020-01-03");
    dto1.setActConcreteTime("a");
    dto1.setPlayed(1);
    list.add(dto1);

    GroupDetailDTO dto2 = new GroupDetailDTO();
    dto2.setHeadsetId(1);
    dto2.setTime("2020-01-01");
    dto2.setActConcreteTime("b");
    dto2.setPlayed(1);
    list.add(dto2);

    GroupDetailDTO dto3 = new GroupDetailDTO();
    dto3.setHeadsetId(1);
    dto3.setTime("2020-01-02");
    dto3.setActConcreteTime("c");
    dto3.setPlayed(1);
    list.add(dto3);

    GroupDetailDTO dto4 = new GroupDetailDTO();
    dto4.setHeadsetId(2);
    dto4.setTime("2020-01-01");
    dto4.setActConcreteTime("d");
    dto4.setPlayed(4);
    list.add(dto4);

    Map<GroupDetailDTO, Integer> collect = list.stream().collect(Collectors.groupingBy(o -> new GroupDetailDTO(o.getHeadsetId(), o.getTime()), TreeMap::new, Collectors.summingInt(o -> o.getPlayed())));
    collect.forEach((k, v) -> {
      System.out.println(k + "@@@" + v);
    });
  }
@Data
public class GroupDetailDTO implements Comparable<GroupDetailDTO> {
  private Integer headsetId;
  private String actConcreteTime;
  private String time;
  private Integer played;

  public GroupDetailDTO() {
  }

  public GroupDetailDTO(Integer headsetId, String time) {
    this.headsetId = headsetId;
    this.time = time;
  }

  @Override
  public int compareTo(GroupDetailDTO o) {
    String a = this.headsetId + "|" + this.getTime();
    String b = o.getHeadsetId() + "|" + o.getTime();
    return a.compareTo(b);
//    return this.getTime().compareTo(o.gtTime());
  }
}

結(jié)果:

上述代碼實(shí)現(xiàn)對(duì)對(duì)象GroupDetailDTO按設(shè)備和時(shí)間分組求played的和,并且按時(shí)間排序了。當(dāng)初想著既然是按時(shí)間排序那么compareTo方法直接使用

return this.getTime().compareTo(o.getTime()); 

但是結(jié)果不正確

分析:分組求和時(shí)如果使用了排序,那么分組時(shí)對(duì)相同屬性的合并將直接根據(jù)compareTo返回的結(jié)果合并對(duì)象,所以如果用上述方法將產(chǎn)生相同的時(shí)間直接合并,而不是new GroupDetailDTO(o.getHeadsetId(), o.getTime())里面的兩個(gè)屬性都相同才合并。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 淺析JAVA中toString方法的作用

    淺析JAVA中toString方法的作用

    以下是對(duì)在JAVA中toString方法的作用進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以參考下
    2013-07-07
  • Java+opencv3.2.0實(shí)現(xiàn)輪廓檢測(cè)

    Java+opencv3.2.0實(shí)現(xiàn)輪廓檢測(cè)

    這篇文章主要為大家詳細(xì)介紹了Java+opencv3.2.0實(shí)現(xiàn)輪廓檢測(cè),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • Java關(guān)鍵字final的實(shí)現(xiàn)原理分析

    Java關(guān)鍵字final的實(shí)現(xiàn)原理分析

    這篇文章主要介紹了Java關(guān)鍵字final的實(shí)現(xiàn)原理分析,在JDK8之前,如果在匿名內(nèi)部類中需要訪問(wèn)局部變量,那么這個(gè)局部變量一定是final修飾的,但final關(guān)鍵字可以省略,需要的朋友可以參考下
    2024-01-01
  • Java SpringBoot Validation用法案例詳解

    Java SpringBoot Validation用法案例詳解

    這篇文章主要介紹了Java SpringBoot Validation用法案例詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-09-09
  • Springboot2 集成 druid 加密數(shù)據(jù)庫(kù)密碼的配置方法

    Springboot2 集成 druid 加密數(shù)據(jù)庫(kù)密碼的配置方法

    這篇文章給大家介紹Springboot2 集成 druid 加密數(shù)據(jù)庫(kù)密碼的配置方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2021-07-07
  • SpringBoot集成Swagger2構(gòu)建可視化API文檔的完整步驟

    SpringBoot集成Swagger2構(gòu)建可視化API文檔的完整步驟

    在前后端分離開(kāi)發(fā)中,API文檔是連接前后端的重要橋梁,Swagger作為一款強(qiáng)大的API文檔工具,能自動(dòng)生成交互式API文檔,極大提升開(kāi)發(fā)效率,本文將詳細(xì)介紹SpringBoot項(xiàng)目集成Swagger2的完整步驟,包含配置細(xì)節(jié)、常見(jiàn)問(wèn)題及解決方案,需要的朋友可以參考下
    2025-07-07
  • spring?boot入門(mén)之誕生背景及優(yōu)勢(shì)影響

    spring?boot入門(mén)之誕生背景及優(yōu)勢(shì)影響

    這篇文章主要為大家描述說(shuō)明了介紹了spring?boot誕生的背景以及其產(chǎn)生的優(yōu)勢(shì)影響,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2022-03-03
  • Jmeter線程組傳參原理解析

    Jmeter線程組傳參原理解析

    這篇文章主要介紹了jmeter線程組傳參原理解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-02-02
  • Java編程偽共享與緩存行填充

    Java編程偽共享與緩存行填充

    這篇文章主要介紹了Java編程偽共享與緩存行填充,下面文章Disruptor提到的CPU緩存話題,做了一些嘗試和研究,如Disruptor所說(shuō),CPU有緩存?zhèn)喂蚕淼膯?wèn)題,并且通過(guò)緩存行填充能完美的解決這個(gè)問(wèn)題,需要的朋友可以參考一下
    2021-09-09
  • 淺談Java 代理機(jī)制

    淺談Java 代理機(jī)制

    Java 有兩種代理方式,一種是靜態(tài)代理,另一種是動(dòng)態(tài)代理。如果我們?cè)诖a編譯時(shí)就確定了被代理的類是哪一個(gè),那么就可以直接使用靜態(tài)代理;如果不能確定,那么可以使用類的動(dòng)態(tài)加載機(jī)制,在代碼運(yùn)行期間加載被代理的類這就是動(dòng)態(tài)代理
    2021-06-06

最新評(píng)論