java stream根据某个字段去重
时间: 2023-10-27 20:04:58 浏览: 471
您可以使用 Java Stream 中的 `distinct()` 方法来根据某个字段去重。首先,需要根据该字段创建一个自定义的比较器,并在 `distinct()` 方法中使用该比较器来判断元素是否相同。
下面是一个示例代码,假设您有一个包含对象的流,每个对象都有一个名为 `field` 的字段,您想要根据该字段去重:
```java
import java.util.Objects;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
// 假设有一个包含对象的流
Stream<MyObject> stream = getMyObjectStream();
// 根据 field 字段去重
List<MyObject> distinctObjects = stream
.filter(Objects::nonNull)
.distinct()
.collect(Collectors.toList());
}
private static Stream<MyObject> getMyObjectStream() {
// 返回包含对象的流的逻辑
}
}
class MyObject {
private String field;
// getter、setter和其他方法省略
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
MyObject myObject = (MyObject) o;
return Objects.equals(field, myObject.field);
}
@Override
public int hashCode() {
return Objects.hash(field);
}
}
```
请替换 `getMyObjectStream()` 方法以获取包含对象的流。在 `MyObject` 类中,我们重写了 `equals()` 和 `hashCode()` 方法,以便根据 `field` 字段判断对象是否相同。然后,在流的操作链中使用 `distinct()` 方法去重,并使用 `collect(Collectors.toList())` 收集结果。
这样,您就可以根据某个字段去重 Java Stream 中的对象了。
阅读全文
相关推荐

















