stream 遍历一个Set<Object>里面 Object有1个string字段 2个set字段 对3个字段相同的元素去重 然后返回
时间: 2025-01-12 10:56:38 浏览: 25
在Java中,可以使用Stream
API对Set<Object>
中的元素进行操作,包括过滤、映射、distinct(去重)等步骤。假设Object
有一个String
字段strField
,两个Set<String>
字段setField1
和setField2
,你需要先获取这三个字段的值,然后对它们进行去重。
下面是一个示例代码片段:
import java.util.*;
import java.util.stream.*;
public List<Object> uniqueObjects(Set<Object> set) {
// 提取每个元素的三个字段并转换成集合
Stream<MultiValue> multiValues = set.stream()
.map(obj -> new MultiValue(obj.getStringField(), obj.getField1AsSet(), obj.getField2AsSet()));
// 合并所有字段的集合
Set<MultiValue> combinedSet = multiValues.flatMap(MultiValue::getCombinedFields)
.collect(Collectors.toSet());
// 取出唯一对象
return combinedSet.stream()
.map(MultiValue::getObject)
.collect(Collectors.toList());
}
// 辅助类,用于存储提取出的字段信息
class MultiValue {
private String strField;
private Set<String> field1;
private Set<String> field2;
public MultiValue(String strField, Set<String> field1, Set<String> field2) {
this.strField = strField;
this.field1 = field1;
this.field2 = field2;
}
public String getStringField() {
return strField;
}
public Set<String> getField1AsSet() {
return field1;
}
public Set<String> getField2AsSet() {
return field2;
}
// 将字符串和Set合并成一个新的Set供去重
public Stream<String> getCombinedFields() {
return Stream.concat(Stream.of(strField), field1.stream(), field2.stream());
}
// 将MultiValue转换回原始的对象
public Object getObject() {
// 这里需要具体的实现,取决于Object的构造方法或属性如何设置
// 如果Object有无参构造,你可以这样做:
// return new Object(strField, field1, field2);
// ... 或者根据实际情况处理
throw new UnsupportedOperationException("GetObject method not implemented");
}
}
相关推荐


















