java stream 取list時間較大的元素list

package com.qianfan123.sail.cre.sync.dmp.plugin.service.impl; import java.util.ArrayList; import java.util.Arrays; import java.util.Comparator; import java.util.Date; import java.util.List; import java.util.Map; import java.util.stream.Collectors; public class Main { public static void main(String[] args) { // 創建包含對象的列表 List<MyObject> list = new ArrayList<>(); list.add(new MyObject("code1", new Date(1631362800000L))); // 2021-09-11 list.add(new MyObject("code2", new Date(1631449200000L))); // 2021-09-12 list.add(new MyObject("code1", new Date(1631535600000L))); // 2021-09-13 list.add(new MyObject("code3", new Date(1631622000000L))); // 2021-09-14 // 使用流操作和Collectors.groupingBy獲取每個code對應的最新對象 Map<String, List<MyObject>> latestObjectsMap = list.stream() .collect(Collectors.groupingBy(MyObject::getCode, Collectors.collectingAndThen( Collectors.maxBy(Comparator.comparing(MyObject::getUpdateDate)), obj -> obj.map(Arrays::asList).orElse(new ArrayList<>())))); // 提取映射中的值列表併合併爲一個列表 List<MyObject> latestObjectsList = latestObjectsMap.values().stream() .flatMap(List::stream) .collect(Collectors.toList()); // 輸出最新的對象列表 System.out.println("Latest objects: " + latestObjectsList); } // 自定義的對象類 static class MyObject { private String code; private Date updateDate; public MyObject(String code, Date updateDate) { this.code = code; this.updateDate = updateDate; } public String getCode() { return code; } public Date getUpdateDate() { return updateDate; } @Override public String toString() { return "MyObject{" + "code='" + code + '\'' + ", updateDate=" + updateDate + '}'; } } }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章