我有一个List<A> qwIdNumberDatas,我想给句A类型中的字段cul1,cul2去重,用stream的api怎么做,去重的字段为string类型
时间: 2024-10-27 16:03:59 浏览: 12
List<Long>转一维数组 Long[](csdn)————程序.pdf
5星 · 资源好评率100%
你可以使用Java 8的Stream API来实现这个需求。首先,你需要创建一个新的流(stream),然后通过`distinct()`操作去除cul1和cul2字段的重复值。假设A类有名为cul1和cul2的String类型的属性,并且你想要基于这两个字段的组合来进行去重,可以这样做:
```java
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
class A {
private String cul1;
private String cul2;
// getters and setters...
}
public class Main {
public static void main(String[] args) {
List<A> qwIdNumberDatas = ... // 初始化你的List
// 使用stream过滤并去重
List<UniqueA> uniqueItems = qwIdNumberDatas.stream()
.collect(Collectors.groupingBy(A::new, Collectors.mapping(a -> new UniqueA(a.cul1, a.cul2), Collectors.toList())));
List<A> distinctList = uniqueItems.values().stream()
.map(UniqueA::getOriginalA)
.collect(Collectors.toList());
System.out.println(distinctList);
}
static class UniqueA {
private final String cul1;
private final String cul2;
private A originalA;
UniqueA(String cul1, String cul2) {
this.cul1 = cul1;
this.cul2 = cul2;
}
public A getOriginalA() {
return originalA;
}
// 为了设置originalA,这里需要提供一个构造函数接收原始A对象
UniqueA(A original, String cul1, String cul2) {
this.originalA = original;
this.cul1 = cul1;
this.cul2 = cul2;
}
}
}
```
在这个例子中,我们创建了一个内部类UniqueA,用于存储原始对象及其唯一标识(cul1和cul2)。然后使用了`Collectors.groupingBy()`方法将列表分组,每个键由cul1和cul2组成,值是一个包含所有具有相同cul1和cul2的新UniqueA对象的列表。最后,我们将这些独特的组合转换回原A类型。
阅读全文