java8的stream将一个List转为依照某个字段分组的map,(Map<String, List<Owner>>)
而后再依照 更新日期 字段取分组的每个list里最大的那个,Map<String, Owner>
最终失去一个map

List<Owner> ---> (Map<String, List<Owner>>) ----> Map<String, Owner>

1. Owner对象构造

import com.baomidou.mybatisplus.annotation.*;import lombok.AllArgsConstructor;import lombok.Builder;import lombok.Data;import lombok.NoArgsConstructor;import java.io.Serializable;import java.util.Date;@Builder@AllArgsConstructor@NoArgsConstructor@Datapublic class Owner implements Serializable {        /**     * 成员名称     */    private String name;     /**     * 身份证号     */    private String idcard;    /**     * 创立工夫     */    private Date createTime;    /**     * 更新工夫     */    private Date updateTime;}

2. 处理过程

    @Test    void testList() throws ParseException {        List<Owner> list = new ArrayList<>();        // 获得字符串示意的Date对象        Date d1 = DateUtils.toDate("1662-05-04 22:22:22");        Date d2 = DateUtils.toDate("0599-01-23 00:00:00");        Date d3 = DateUtils.toDate("1328-10-21 11:11:11");        Owner o1 = Owner.builder().idcard("1001").updateTime(d1).name("康熙").build();        Owner o2 = Owner.builder().idcard("1001").updateTime(d2).name("李世民").build();        Owner o3 = Owner.builder().idcard("1001").updateTime(d3).name("朱元璋").build();        Owner o4 = Owner.builder().idcard("1002").updateTime(d1).name("张三").build();        Owner o5 = Owner.builder().idcard("1003").updateTime(d1).name("李四").build();        list.add(o1);        list.add(o2);        list.add(o3);        list.add(o4);        list.add(o5);        // 将List依照Owner对象的 idcard 字段分组 失去map        Map<String, List<Owner>> listMap = list.stream().collect(Collectors.groupingBy(Owner::getIdcard));        // java8 Stream max函数应用的比拟器:依照updateTime字段比拟        Comparator<Owner> comparator = Comparator.comparing(Owner::getUpdateTime);        // Map转换,获得每个idcard的最初更新的对象(多取一)        Map<String, Owner> resultMap = new HashMap<>();        listMap.entrySet().stream().forEach(e-> {            Owner owner = e.getValue().stream().max(comparator).get();            resultMap.put(e.getKey(), owner);        });        // 最终失去 每个idcard一个对象的map        System.out.println(GsonUtils.toGson(resultMap));

3. 最终后果:

{    "1003":{        "name":"李四",        "idcard":"1003",        "updateTime":"1662-05-04 22:22:22"    },    "1002":{        "name":"张三",        "idcard":"1002",        "updateTime":"1662-05-04 22:22:22"    },    "1001":{        "name":"康熙",        "idcard":"1001",        "updateTime":"1662-05-04 22:22:22"    }}