zoukankan      html  css  js  c++  java
  • 同一个类生成的对象去重

    同一个类生成的对象去重

    场景

    在项目中,对数组或者集合中的重复元素去重是一个比较常见的场景。而类似Set这类集合也自带了去重功能。

    但是如果数组或者集合中的元素是一个由同一个类创建的多个对象呢,对象有多个属性,每一个属性值都相同,该如何去重?

    以下提供一个简单的算法解决以上问题。

    思路

    1. 挑出对象中的一个属性,作为一个基准;
    2. 遍历对象;
    3. 将所挑选的对象的值塞进Set集合;
    4. 判断Set集合中是否含有该值,如果有,进行第3步;如果没有,进行第2步。

    演示

    创建一个实体类Friends,简化成两个属性:

    public class Friends {
        private String name;
        private int age;
        public Friends(String name, int age) {
            this.name = name;
            this.age = age;
        }
    		// set/get省略...
    }
    

    去重算法(核心):

        /**
         * 去重方法
         *
         * @param friends 需要去重的对象集合
         * @return 已经去重的对象集合
         */
        private static List<Friends> distinctFriends(List<Friends> friends){
            List<Friends> friendsDistinct = new ArrayList<>();
            Set<String> set = new HashSet<>();
            for (Friends friend:friends){
                String key = friend.getName();
                if(!set.contains(key)){
                    set.add(key);
                    friendsDistinct.add(friend);
                }
            }
            return friendsDistinct;
        }
    

    测试:

        public static void main(String[] args) {
            Friends friends1 = new Friends("admin",21);
            Friends friends2 = new Friends("admin",21);
            List<Friends> friends = new ArrayList<>();
            friends.add(friends1);
            friends.add(friends2);
            List<Friends> distinctedFriends2 = distinctFriends(friends);
            System.out.println(distinctedFriends2);
        }
    

    结果:

  • 相关阅读:
    PHP基础知识系列:预定义变量
    PHP基础知识系列:拦截器方法
    【PHP设计模式】创建型之单例(Singleton)
    PHP基础知识系列:cookie与session
    select问题
    柳传志给杨元庆的信
    PHP基础知识系列:多态性
    PHP基础知识系列:面向对象基础
    PHP处理字符串翻转问题总结
    PHP基础知识系列:静态
  • 原文地址:https://www.cnblogs.com/yanfei1819/p/10643625.html
Copyright © 2011-2022 走看看