我是靠谱客的博主 单薄咖啡,最近开发中收集的这篇文章主要介绍stream.collect(Collectors.toList())去重问题,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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())去重问题所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(57)

评论列表共有 0 条评论

立即
投稿
返回
顶部