Реализуйте класс Sortable, который имеет динамически генерируемые свойства - PullRequest
0 голосов
/ 25 января 2020

Мне нужен класс, который можно отсортировать по свойствам (возможно, с использованием 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» может быть отсортирован по данный атрибут (et c: отсортировано по attrib3).

1 Ответ

2 голосов
/ 25 января 2020

Прежде всего:

public class Special {

     Map<String, Comparable> hashMap = new HashMap<String, 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"));
...