java中stream流判断list集合中的对象,是否有重复数据,根据对象的id确定唯一性
时间: 2024-03-12 18:49:25 浏览: 125
可以使用Java 8 中的 Stream API 来处理这个问题。具体步骤如下:
1. 使用`stream()`方法将 List 转换为 Stream 对象。
2. 使用`distinct()`方法去重,根据对象的`id`属性确定唯一性。
3. 使用`filter()`方法过滤出重复的对象并收集到一个新的 List 中。
4. 最后,判断新的 List 是否为空,即可得出是否有重复数据。
以下是示例代码:
```java
import java.util.List;
import java.util.stream.Collectors;
public class CheckDuplicateObjects {
public static boolean hasDuplicate(List<MyObject> list) {
List<MyObject> duplicates = list.stream()
.distinct()
.filter(item -> list.stream().filter(i -> i.getId() == item.getId()).count() > 1)
.collect(Collectors.toList());
return !duplicates.isEmpty();
}
}
class MyObject {
private int id;
private String name;
// constructor, getters and setters
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (!(obj instanceof MyObject)) {
return false;
}
MyObject other = (MyObject) obj;
return id == other.id;
}
@Override
public int hashCode() {
return Integer.hashCode(id);
}
}
```
在上面的示例代码中,我们定义了一个`CheckDuplicateObjects`类,其中包含一个`hasDuplicate`方法,它接收一个包含对象的 List 作为参数,并返回一个布尔值,表示是否有重复数据。
在方法中,我们首先将 List 转换为 Stream 对象,然后使用`distinct()`方法去重。由于`distinct()`方法默认使用对象的`equals()`和`hashCode()`方法来判断唯一性,因此我们需要在对象类中重写这两个方法,以实现根据`id`属性去重。
接着,我们使用`filter()`方法过滤出重复的对象,并使用`collect()`方法将它们收集到一个新的 List 中。最后,我们判断新的 List 是否为空,即可得出是否有重复数据。
请注意,上面的代码中使用了`equals()`和`hashCode()`方法来判断唯一性,因此需要在`MyObject`类中重写这两个方法。如果你使用的是其他类,需要根据具体情况进行修改。
阅读全文