stream根据某个属性去重
时间: 2023-09-26 13:10:43 浏览: 103
根据引用和引用的内容,可以使用Stream流根据某个属性进行去重。对于TreeSet,可以通过实现Comparable接口并重写compareTo方法来实现自然排序和去重。例如,可以创建一个DtoReq类,并在其中重写compareTo方法以比较userName属性。然后,可以使用Collectors.toCollection方法和TreeSet::new构造一个TreeSet集合,并将其转换为ArrayList集合,即可实现根据userName属性进行去重。示例代码如下:
```java
@Data
public class DtoReq implements Comparable<DtoReq> {
private String userName;
private String password;
@Override
public int compareTo(DtoReq o) {
return o.getUserName().compareTo(this.getUserName());
}
}
List<DtoReq> collect = arrayList.stream()
.collect(Collectors.collectingAndThen(
Collectors.toCollection(TreeSet::new),
ArrayList::new)
);
```
另外,根据引用的内容,还可以使用HashSet来实现去重。只需重写DtoReq类的equals方法和hashCode方法即可。使用Collectors.toCollection方法和HashSet::new构造一个HashSet集合,并将其转换为ArrayList集合,即可实现根据userName属性进行去重。示例代码如下:
```java
@Data
public class DtoReq {
private String userName;
private String password;
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
DtoReq dtoReq = (DtoReq) o;
return Objects.equals(userName, dtoReq.userName);
}
@Override
public int hashCode() {
return Objects.hash(userName);
}
}
List<DtoReq> collect = arrayList.stream()
.collect(Collectors.collectingAndThen(
Collectors.toCollection(HashSet::new),
ArrayList::new)
);
```
通过以上方法,即可使用Stream根据某个属性进行去重。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *2* *3* [Stream按对象某属性去重的方案](https://blog.csdn.net/m0_56079407/article/details/124429050)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"]
[ .reference_list ]
阅读全文
相关推荐


















