概述
java8 stream源码中stream.collect(Collectors.toList())去重
**
利用 java8 stream对list或者set中带有(“aaa”,“88888”)等复杂字段去重。如若失败可能是equals方法原因,需要重写hashCode(), equals(Object obj)方法。
测试发现如果hashCode()的字段为Long类型,即不是String的话equals(Object obj)方法中的this.id==other.getId()应将换成this.id.equals(other.getId(),测试即可成功。
需要的朋友可可参考一下如下代码。
菜鸟小白zzh分享
package zzh;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
public class Test {
public static void main(String[] args) {
EqualsObj obj1 =new EqualsObj("1","xxx");
EqualsObj obj2 =new EqualsObj("1","88888");
EqualsObj obj3 =new EqualsObj("2","xxx");
List<EqualsObj> list = new ArrayList<>();
list.add(obj1);
list.add(obj2);
list.add(obj3);
list = list.stream().distinct().collect(Collectors.toList());
Set<EqualsObj> set = new HashSet<>();
set.add(obj1);
set.add(obj2);
set.add(obj3);
}
static class EqualsObj{
private String id;
private String name;
public EqualsObj(String id,String name){
this.id = id;
this.name = name;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public int hashCode() {
int result = 17;
result = 31 * result + (id == null ? 0 : id.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
//地址相等
if(this == obj){
return true;
}
if(obj == null){
//非空性:对于任意非空引用x,x.equals(null)应该返回false。
return false;
}
if(obj instanceof EqualsObj){
EqualsObj other = (EqualsObj) obj;
//需要比较的字段相等,则这两个对象相等
if(this.id==other.getId()){
return true;
}
}
return false;
}
}
}
最后
以上就是单薄咖啡为你收集整理的stream.collect(Collectors.toList())去重问题的全部内容,希望文章能够帮你解决stream.collect(Collectors.toList())去重问题所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复