【发布时间】:2026-01-03 08:55:01
【问题描述】:
让我们在对象前面加上前缀 equals 实现不是我需要过滤的方式,所以distinct 本身不起作用。
class MyObject {
String foo;
MyObject( String foo ) {
this.foo = foo;
}
public String getFoo() { return foo; }
}
Collection<MyObject> listA = Arrays.asList("a", "b", "c").stream().map(MyObject::new)
.collect(Collectors.toList());
Collection<MyObject> listB = Arrays.asList("b", "d").stream().map(MyObject::new)
.collect(Collectors.toList());
// magic
如何合并和去重列表,以便结果列表应该是包含“a”、“b”、“c”、“d”的 MyObjects?
注意:这是对我们实际需要去重的方法的简化,这些方法实际上是由 hibernate 加载的实体的复杂 DTO,但此示例应充分展示目标。
【问题讨论】:
-
在映射值之前获取不同的集合?
-
@biziclop 认为这些是从休眠加载的实体列表。我把它省略了,因为我认为它给问题的声明增加了不必要的复杂性。我实际上没有要映射到一组复杂对象然后尝试区分的字符串列表。我只有复杂的对象。
-
您是否考虑过使用 Guava 及其等价物?
-
@fge 我没有,我们确实有番石榴……尽管在某种程度上,我们正试图摆脱番石榴。我们知道如何用循环来做到这一点......
-
@TagirValeev 因为 80% 的问题是重复数据删除的,所以我不会做太多的斗争,但我的问题和被骗者之间的区别包括“合并多个列表”,我们是处理多个属性(尽管我不确定这种区别是否相关)。
标签: java java-8 java-stream