【问题标题】:Implement a Sortable class, that has dynamically generated properties实现一个具有动态生成属性的可排序类
【发布时间】:2020-05-11 07:47:44
【问题描述】:

我想要一个可以按属性排序的类(可能使用 Comparable 和 Comparator)。但是这个类不是一个普通的类属性,而是一个“键值对列表”。

class Normal
{
   String attrib1;
   String attrib2;
   int attrib3;
}

这个类的属性

class Special
{
    Map<String,Object> attributes =new HashMap<String,Object>()
}

基本上,类属性是根据场景动态生成的。所以在给定的场景中,对象属性 hashmap 会有,

attrib1 : "value1"
attrib2 : "value2"
attrib3 : 3

所以我需要实现“Special”类,其中“Special”类型的对象列表可以按给定的属性排序(等:按属性3排序)。

【问题讨论】:

    标签: java sorting generics comparator comparable


    【解决方案1】:

    首先:

    public class Special {
    
         Map<String, Comparable> hashMap = new HashMap<String, Comparable>();
    }
    

    这些值必须实现 Comparable 接口。

    然后你可以像这样使用比较器:

    public class SpecialComparator implements Comparator<Special> {
    
        private String key;
    
        public SpecialComparator(String key) {
            this.key = key;
        }
    
        @Override
        public int compare(Special o1, Special o2) {
            // manage cases where o1 or o2 do not contains key
            return o1.hashMap.get(key).compareTo(o2.hashMap.get(key));
        }
    
    }
    

    最后对您的列表进行排序:

    Collections.sort(list, new SpecialComparator("somekey"));
    

    【讨论】:

    • 你在这里使用原始类型?
    • 是的,我愿意。尽管原则上可以开发一个完全通用的解决方案,但我似乎理解@Aki T 提出的映射可以包含例如字符串和整数......因此选择的原始类型将允许使用偶数数据,例如不可序列化或其他任何东西
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多