Java 中 stream流怎么过滤掉重复数据
时间: 2023-04-01 21:00:51 浏览: 161
可以使用 distinct() 方法来过滤掉重复数据。例如,对一个 List 进行去重可以这样写:
List<Integer> list = Arrays.asList(1, 2, 2, 3, 3, 4, 5);
List<Integer> distinctList = list.stream().distinct().collect(Collectors.toList());
这样,distinctList 中就只包含了 1, 2, 3, 4, 5 这几个元素,重复的元素被过滤掉了。
相关问题
java stream流判断重复数据
可以使用Java 8中的Stream流和Collectors工具类来判断重复数据。具体实现可以使用distinct()方法去除重复元素,然后比较去重前后的元素个数是否相等,如果不相等,则说明存在重复数据。
示例代码如下:
```
List<Integer> list = Arrays.asList(1, 2, 3, 4, 2, 5, 6, 3);
boolean hasDuplicate = list.size() != list.stream().distinct().count();
System.out.println(hasDuplicate); // true
```
java中stream流判断list集合中的对象,是否有重复数据,根据对象的id确定唯一性
可以使用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`类中重写这两个方法。如果你使用的是其他类,需要根据具体情况进行修改。
阅读全文