java取对象数组相同名称下时间最迟的结果集
一、对象数组相同名称下获得时间最迟的结果集
注意DateUtil工具类用了hutool工具包(当前日期2024-03-22)
@Test
void test() {
BaseEntity baseEntity1 = new BaseEntity().setCreateId(1).setCreateTime(DateUtil.parseDate("2024-03-18"));
BaseEntity baseEntity2 = new BaseEntity().setCreateId(2).setCreateTime(DateUtil.parseDate("2024-02-18"));
BaseEntity baseEntity3 = new BaseEntity().setCreateId(1).setCreateTime(DateUtil.parseDate("2024-02-18"));
BaseEntity baseEntity4 = new BaseEntity().setCreateId(2).setCreateTime(DateUtil.parseDate("2024-05-18"));
BaseEntity baseEntity5 = new BaseEntity().setCreateId(2).setCreateTime(DateUtil.parseDate("2024-01-18"));
ArrayList<BaseEntity> baseEntities = new ArrayList<>();
baseEntities.add(baseEntity1);
baseEntities.add(baseEntity2);
baseEntities.add(baseEntity3);
baseEntities.add(baseEntity4);
baseEntities.add(baseEntity5);
List<BaseEntity> collect = baseEntities.stream()
.collect(Collectors.groupingBy(BaseEntity::getCreateId))
.values().stream()
.map(list -> list.stream().max(Comparator.comparing(BaseEntity::getCreateTime)).get())
.collect(Collectors.toList());
collect.forEach(item -> System.out.println("Latest item: " + item.getCreateId() + ", " + item.getCreateTime()));
}
二、对象数组相同名称下获得时间区间内时间最迟的结果集
代码(当前日期2024-03-22)
@Test
void test() {
BaseEntity baseEntity1 = new BaseEntity().setCreateId(1).setCreateTime(DateUtil.parseDate("2024-03-01")).setUpdateTime(DateUtil.parseDate("2024-04-01"));
BaseEntity baseEntity2 = new BaseEntity().setCreateId(2).setCreateTime(DateUtil.parseDate("2024-02-01")).setUpdateTime(DateUtil.parseDate("2024-03-01"));
BaseEntity baseEntity3 = new BaseEntity().setCreateId(1).setCreateTime(DateUtil.parseDate("2024-03-01")).setUpdateTime(DateUtil.parseDate("2024-05-01"));
BaseEntity baseEntity4 = new BaseEntity().setCreateId(2).setCreateTime(DateUtil.parseDate("2024-03-01")).setUpdateTime(DateUtil.parseDate("2024-04-01"));
BaseEntity baseEntity5 = new BaseEntity().setCreateId(2).setCreateTime(DateUtil.parseDate("2024-04-01")).setUpdateTime(DateUtil.parseDate("2024-05-01"));
ArrayList<BaseEntity> baseEntities = new ArrayList<>();
baseEntities.add(baseEntity1);
baseEntities.add(baseEntity2);
baseEntities.add(baseEntity3);
baseEntities.add(baseEntity4);
baseEntities.add(baseEntity5);
List<BaseEntity> collect = baseEntities.stream()
.collect(Collectors.groupingBy(BaseEntity::getCreateId))
.values().stream()
.map(list -> list.stream()
.filter(event -> event.getCreateTime().before(DateUtil.date()) && event.getUpdateTime().after(DateUtil.date()))
.max(Comparator.comparing(BaseEntity::getUpdateTime)).get())
.collect(Collectors.toList());
collect.forEach(item -> System.out.println("Latest item: " + item.getCreateId() + ", " + item.getCreateTime() + ", " + item.getUpdateTime()));
}
三、对象数组相同名称下获得时间区间内时间最迟的结果集如果存在空则排除
发生场景
如果分组中存在组别内有不存在数据则排除该组别(当前日期2024年4月3日)
@Test
void test() {
BaseEntity baseEntity1 = new BaseEntity().setCreateId(1).setCreateTime(DateUtil.parseDate("2024-03-01")).setUpdateTime(DateUtil.parseDate("2024-04-01"));
BaseEntity baseEntity2 = new BaseEntity().setCreateId(2).setCreateTime(DateUtil.parseDate("2024-02-01")).setUpdateTime(DateUtil.parseDate("2024-03-01"));
BaseEntity baseEntity3 = new BaseEntity().setCreateId(1).setCreateTime(DateUtil.parseDate("2024-03-01")).setUpdateTime(DateUtil.parseDate("2024-04-01"));
BaseEntity baseEntity4 = new BaseEntity().setCreateId(2).setCreateTime(DateUtil.parseDate("2024-03-01")).setUpdateTime(DateUtil.parseDate("2024-04-01"));
BaseEntity baseEntity5 = new BaseEntity().setCreateId(2).setCreateTime(DateUtil.parseDate("2024-04-01")).setUpdateTime(DateUtil.parseDate("2024-05-01"));
ArrayList<BaseEntity> baseEntities = new ArrayList<>();
baseEntities.add(baseEntity1);
baseEntities.add(baseEntity2);
baseEntities.add(baseEntity3);
baseEntities.add(baseEntity4);
baseEntities.add(baseEntity5);
List<BaseEntity> collect = baseEntities.stream()
.collect(Collectors.groupingBy(BaseEntity::getCreateId))
.values().stream()
.map(list -> list.stream()
.filter(event -> event.getCreateTime().before(DateUtil.date()) && event.getUpdateTime().after(DateUtil.date()))
.max(Comparator.comparing(BaseEntity::getUpdateTime)).orElse(null))//如果组别不符合筛选则返回null
.filter(Objects::nonNull)//排除内容为null的组别
.collect(Collectors.toList());
collect.forEach(item -> System.out.println("Latest item: " + item.getCreateId() + ", " + item.getCreateTime() + ", " + item.getUpdateTime()));
}
输出结果
Latest item: 2, 2024-04-01 00:00:00, 2024-05-01 00:00:00
- 持之以恒,坚韧不拔,努力拼搏,未来才会闪耀光芒,坚信自己,勇往直前!
- 拥有梦想的人永不放弃,付出汗水与泪水,笑对挑战,终将登上成功的巅峰。
- 坚持信念,努力向前,无惧风雨,终会收获彩虹,心怀希望,梦想必能指引远方。
- 冥冥中自有安排,付出总有回报,坚强勇敢,终能实现山重水复的壮丽辉煌。
- 拥有信心,跨越难关,每一次挑战都是成长,心怀感恩,每一步坚定向前走。
- 坚守初心,砥砺前行,执着追梦,不忘价值,终将登上成功的巅峰,浴火重生。
- 勇往直前,不畏困难,扬起风帆,驶向明天,心怀感恩,拥抱平凡生活中的每个小确幸。