MrI*_*ian 4 spring project-reactor spring-webflux
如何过滤我自己的类的重复对象?例如:我有一个具有以下属性的类:
public class MyClass{
private String id;
private Date lastUpdate;
//Getter and Setter are available
}
Run Code Online (Sandbox Code Playgroud)
现在我有一个包含很多 MyClass 对象的 Flux。它们可能包含相同的 ID,但日期不同。我想删除具有相同 id 的所有对象,但我想保留最后更新的对象。
Flux<MyClass> fluxMyContainer = Flux.just(new MyClass("1", "2017-01-02),
new MyClass("2", "2018-11-05"), new MyClass("1", "2018-05-04"));
Run Code Online (Sandbox Code Playgroud)
在这种情况下我想删除第一个元素。有谁知道如何在不阻塞的情况下做到这一点?
你可以:
Flux.just(...)
.groupBy(MyClass::getId)
.flatMap(g -> g.reduce((a, b) -> a.getLastUpdate().compareTo(b.getLastUpdate()) > 0 ? a : b))
.subscribe(System.out::println);
Run Code Online (Sandbox Code Playgroud)
例如:
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);
Run Code Online (Sandbox Code Playgroud)
印刷:
MyClass{id='1', lastUpdate=2000-03-01}
MyClass{id='2', lastUpdate=2010-04-05}
MyClass{id='3', lastUpdate=-999999999-01-01}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9236 次 |
| 最近记录: |