栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java按照list集合中的对象属性进行去重

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java按照list集合中的对象属性进行去重

文章目录
    • 1.java按照list集合中的对象属性进行去重

1.java按照list集合中的对象属性进行去重

有时候我们需要对List集合进行去重,但是去重的集合不是String,Integer等简单的数据类型,而是复杂的对象类型,并且是根据List集合中的对象的指定属性进行去重,我这里封装了一个方法,是根据jdk源码来的,不需要引入任何第三方依赖,无任何侵入性。非常的灵活,可以指定任意属性进行去重。

具体看代码:

public class DistinctListTest {

    public static void main(String[] args) throws Exception {
       

        User userInfo1 = new User("1", "admin");
        User userInfo2 = new User("2", "root");
        User userInfo4 = new User("3", "admin");
        User userInfo3 = new User("4", "jack");


        List userInfoList = Arrays.asList(userInfo1, userInfo2, userInfo3, userInfo4);

        System.out.println(distinctListForAttribute(userInfoList,"name"));



    }

    
    public static Object getFieldValue(Object target, String filedName) {

        if (target == null || filedName == null ||  filedName.trim().length()<=0){
            throw new ArithmeticException("target 或 filedName 不能为空!");
        }

        Class clazz = target.getClass();
        Field[] fields = clazz.getDeclaredFields();
        for (Field field : fields) {
            field.setAccessible(true);
            if (field.getName().equals(filedName)) {
                try {
                    return field.get(target);
                } catch (IllegalAccessException e) {
                    e.printStackTrace();
                    throw new RuntimeException("根据对象属性名获取属性值发生错误:" + e.getMessage());
                }
            }
        }
        throw new RuntimeException("未能根据对象属性名获取属性值");
    }

    
    public static  List distinctListForAttribute(List userInfoList,String filedName) {
        List filteredList = new ArrayList<>();
        Map seen = new ConcurrentHashMap<>();
        try {
            userInfoList.stream()
                    .filter(item-> seen.putIfAbsent(getFieldValue(item,filedName), Boolean.TRUE) == null)
                    .forEach(filteredList::add);
            seen.clear();
        }catch (Exception e){
            e.printStackTrace();
            throw new RuntimeException("根据属性名去重List集合中的对象发生异常:"+e.getMessage());
        }
        return  filteredList;
    }


    static class User {

        @Override
        public String toString() {
            return "User{" +
                    "id='" + id + ''' +
                    ", name='" + name + ''' +
                    '}';
        }
        public User() { }

        public User(String id, String name) {
            this.id = id;
            this.name = name;
        }

        private String id;
        private String 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;
        }
    }


}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/991758.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号