List集合去除重復對象。。。記錄一下


類中只有這
class Role_permission{
private Integer id;

private Integer rid;

private Integer pid;
}

重寫這兩個方法 判斷規則pid一致我就認為兩個比較的類相同

@Override
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (this == obj) {
return true;
}
if (obj instanceof Role_permission) {
Role_permission rp = (Role_permission) obj;
if (rp.pid.equals(this.pid)) {//添加自己的規則true為相同
return true;
} else {
return false;
}
}
return false;
}

@Override
public int hashCode() {
int result = pid.hashCode();//添加自己的規則也是一樣
return result;
}
第一種方案
List<Role_permission> list1 = new ArrayList<Role_permission>(new LinkedHashSet<>(去重集合));

第二種方案
List<Role_permission> personList = new ArrayList<>();
去重集合.stream().forEach(
        p -> {
if (!personList.contains(p)) {
personList.add(p);
}
}
);
第三種方案
Set<Role_permission> ts = new HashSet<Role_permission>();
ts.addAll(去重集合); 原理應該跟第一種類似

第四種方案
List<Role_permission> unique =去重集合.stream().collect(collectingAndThen(toCollection(() -> new TreeSet<>(comparingLong(Role_permission::getPid))), ArrayList::new));





免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。