任务描述:
在返回的用户信息列表中,如果用户名字(name字段)相同,则只返回用户创建时间(createTime字段)最早的一条数据。
信息实体类:
@Data
public class User {
private String userId;
private String name;
private String address;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
private Date createTime;
}
测试类:
public static void main(String[] args) throws Exception{
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
sdf.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai"));
User user1 = new User();
user1.setUserId("11");
user1.setAddress("地址11");
user1.setName("姓名11");
user1.setCreateTime(sdf.parse("2020-07-09 21:12:45"));
User user2 = new User();
user2.setUserId("22");
user2.setAddress("地址22");
user2.setName("姓名22");
user2.setCreateTime(sdf.parse("2020-08-09 21:12:45"));
User user3 = new User();
user3.setUserId("33");
user3.setAddress("地址33");
user3.setName("姓名33");
user3.setCreateTime(sdf.parse("2020-07-10 21:12:45"));
User user4 = new User();
user4.setUserId("44");
user4.setAddress("地址44");
user4.setName("姓名44");
User user5 = new User();
user5.setUserId("55");
user5.setAddress("地址55");
user5.setName("姓名55");
User user6 = new User();
user6.setUserId("66");
user6.setAddress("地址66");
user6.setName("姓名11");
user6.setCreateTime(sdf.parse("2016-01-10 21:12:45"));
User user7 = new User();
user7.setUserId("11");
user7.setAddress("地址77777");
user7.setName("姓名11");
// user7.setCreateTime(sdf.parse("2020-01-10 21:12:45"));
User user8 = new User();
user8.setUserId("11");
user8.setAddress("地址8888");
user8.setName("姓名11");
// user8.setCreateTime(sdf.parse("2020-05-10 21:12:45"));
List<User> list1 = new ArrayList<>();
list1.add(user1);
list1.add(user2);
list1.add(user3);
list1.add(user7);
list1.add(user8);
list1.add(user6);
System.out.println("输出m1的值111:" + JSONObject.toJSONString(list1));
//防止CreateTime字段为空,给它设置初始值
List<User> list5 = list1.stream().filter(e -> {
if(e.getCreateTime() == null){
try {
e.setCreateTime(sdf.parse("9999-12-31 23:00:00"));
} catch (ParseException parseException) {
parseException.printStackTrace();
}
return true;
}
return true;
}).collect(Collectors.toList());
System.out.println("输出m1的值555:" + JSONObject.toJSONString(list5));
//列表中重复的数据取时间最早的一条
Map<String, User> collect = list5.stream().collect(
Collectors.groupingBy(User::getName,
Collectors.collectingAndThen(Collectors.reducing((c1, c2) -> c1.getCreateTime().getTime() < c2.getCreateTime().getTime() ? c1 : c2),
Optional::get)));
List<User> list6 = new ArrayList<>(collect.values());
System.out.println("输出m1的值666:" + JSONObject.toJSONString(list6));
}
运行结果:
输出m1的值111:[{"address":"地址11","createTime":1594300365000,"name":"姓名11","userId":"11"},{"address":"地址22","createTime":1596978765000,"name":"姓名22","userId":"22"},{"address":"地址33","createTime":1594386765000,"name":"姓名33","userId":"33"},{"address":"地址77777","name":"姓名11","userId":"11"},{"address":"地址8888","name":"姓名11","userId":"11"},{"address":"地址66","createTime":1452431565000,"name":"姓名11","userId":"66"}]
输出m1的值555:[{"address":"地址11","createTime":1594300365000,"name":"姓名11","userId":"11"},{"address":"地址22","createTime":1596978765000,"name":"姓名22","userId":"22"},{"address":"地址33","createTime":1594386765000,"name":"姓名33","userId":"33"},{"address":"地址77777","createTime":253402268400000,"name":"姓名11","userId":"11"},{"address":"地址8888","createTime":253402268400000,"name":"姓名11","userId":"11"},{"address":"地址66","createTime":1452431565000,"name":"姓名11","userId":"66"}]
输出m1的值666:[{"address":"地址33","createTime":1594386765000,"name":"姓名33","userId":"33"},{"address":"地址22","createTime":1596978765000,"name":"姓名22","userId":"22"},{"address":"地址66","createTime":1452431565000,"name":"姓名11","userId":"66"}]
Colletors工具学习更多:
对于更多的Steam中Colletors工具的操作方法:
Colletors工具的操作方法