Мне приходит в голову одно решение:
groupBy
id
- затем
reduce
группыбросая старую запись - наконец
flatMap
Mono
с
код:
Flux.just(...)
.groupBy(MyClass::getId)
.flatMap(g -> g.reduce((a, b) -> a.getLastUpdate().compareTo(b.getLastUpdate()) > 0 ? a : b))
.subscribe(System.out::println);
Например:
Flux.just(
new MyClass("1", LocalDate.of(1990, 2, 3)),
new MyClass("1", LocalDate.of(2000, 3, 1)),
new MyClass("2", LocalDate.of(1000, 2, 2)),
new MyClass("2", LocalDate.of(2010, 4, 5)),
new MyClass("2", LocalDate.MIN),
new MyClass("3", LocalDate.MIN))
.groupBy(MyClass::getId)
.flatMap(g -> g.reduce((a, b) -> a.getLastUpdate().compareTo(b.getLastUpdate()) > 0 ? a : b))
.subscribe(System.out::println);
напечатает:
MyClass{id='1', lastUpdate=2000-03-01}
MyClass{id='2', lastUpdate=2010-04-05}
MyClass{id='3', lastUpdate=-999999999-01-01}