java8 stream自定義分組求和并排序的實(shí)現(xiàn)
本文主要介紹了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 NIO實(shí)現(xiàn)簡(jiǎn)單聊天室功能
這篇文章主要為大家詳細(xì)介紹了JAVA NIO實(shí)現(xiàn)簡(jiǎn)單聊天室功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-11-11Java Swing JPasswordField密碼框的實(shí)現(xiàn)示例
這篇文章主要介紹了Java Swing JPasswordField密碼框的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12java顯示當(dāng)前的系統(tǒng)時(shí)間
這篇文章主要介紹了java如何顯示當(dāng)前的系統(tǒng)時(shí)間,代碼很簡(jiǎn)單,自己可以自定義顯示的系統(tǒng)時(shí)間的顏色和字體,需要的朋友可以參考下2015-10-10Spring實(shí)戰(zhàn)之ResourceLoaderAware加載資源用法示例
這篇文章主要介紹了Spring實(shí)戰(zhàn)之ResourceLoaderAware加載資源用法,結(jié)合實(shí)例形式分析了spring使用ResourceLoaderAware加載資源相關(guān)配置與操作技巧,需要的朋友可以參考下2020-01-01java+opencv實(shí)現(xiàn)人臉識(shí)別功能
這篇文章主要介紹了java+opencv實(shí)現(xiàn)人臉識(shí)別功能,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-05-05基于Java實(shí)現(xiàn)簡(jiǎn)易的局域網(wǎng)對(duì)話系統(tǒng)
這篇文章主要介紹了基于Java實(shí)現(xiàn)的簡(jiǎn)易的局域網(wǎng)對(duì)話系統(tǒng),文中的示例代碼對(duì)我們學(xué)習(xí)Java有一定的幫助,感興趣的小伙伴快來(lái)跟隨小編一起學(xué)習(xí)一下吧2021-12-12SpringBoot線上環(huán)境徹底關(guān)閉Swagger-UI的方式
這篇文章主要給大家介紹了SpringBoot線上環(huán)境徹底關(guān)閉Swagger-UI的方式,文中給出了詳細(xì)的代碼示例供大家參考,對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2023-12-12