Java: как сравнить объекты в массиве, имея несколько классов

Определение вашего типа:

type keys struct {
    Key1 map[string]key1 `yaml:"key1"`
}

type key1 struct {
    Attr1 string   `yaml:"attr1"`
    Attr2 string   `yaml:"attr2"`
    Attr3 string   `yaml:"attr3"`
    List1 []string `yaml:"list1"`
    List2 []string `yaml:"list2"`
}

Использует эту структуру:

key1:
    stuff:
        attr1: "attr1"
        attr2: "attr2"
        attr3: "attr3"
        list1: ["a", "b", "c"]
        list2: ["d", "e", "f"]
    morestuff:
        attr1: "attr1"
        attr2: "attr2"
        attr3: "attr3"
        list1: ["a", "b", "c"]
        list2: ["d", "e", "f"]

Поскольку для вашего типа данных key1 должен содержать карту ключей к structs - добавление уровня к иерархии, которая не существует. Для YAML, который вы опубликовали, ваша структура должна быть:

type keys struct {
    Key1 key1 `yaml:"key1"`
}

type key1 struct {
    Attr1 string   `yaml:"attr1"`
    Attr2 string   `yaml:"attr2"`
    Attr3 string   `yaml:"attr3"`
    List1 []string `yaml:"list1"`
    List2 []string `yaml:"list2"`
}
-1
задан Seyhmus Gokcen 19 January 2019 в 12:51
поделиться

2 ответа

Сначала вы реализуете интерфейс Comparable для своего класса питомцев и добавляете метод сравнения к классу питомцев, который возвращает целое число (+ ve, если этот питомец больше, чем у другого питомца) в противном случае.

class Pet implements Comparable{
    String name;
    int weight;
    int height; 
    public int compareTo(Pet otherPet){  
        if(weight > otherPet.weight){
            return 1;
        }
        else if(weight = otherPet.weight){
            if(height > otherPet.height){
                return 1;
            }
        }
        else{
         return -1;
        }
    }
}

Реализация этого интерфейса позволяет вам использовать эту строку, которая сортирует ваш массив

Collections.sort(Pets);
0
ответ дан Sanath Kumar 19 January 2019 в 12:51
поделиться

Вариант 1. Использование пользовательского компаратора

Если вы хотите отсортировать массив Pet pets, вы можете использовать Array.sort () и предоставить Comparator :

Arrays.sort(pets, Comparator.comparing(Pet::getWeight).thenComparing(Pet::getHeight));

Я предполагал, что у вас есть добытчики веса и роста.
Сортируйте ваш массив от самых легких до самых тяжелых и от самых маленьких до самых высоких, если два питомца имеют одинаковый вес.

Вы можете вызвать его в своем Pets конструкторе:

public Pets(Pet[] pets){
    Arrays.sort(pets, ...);
    this.pets = pets;
}

Вариант 2: Реализация сопоставимого интерфейса

В качестве альтернативы, вы можете изменить свой класс для реализации Сравним и реализуем метод CompareTo ():

public class Pet implements Comparable<Pet>{

    ...

    @Override
    public int compareTo(Pet o) {
        int result = Integer.compare(this.height, o.height);
        if(result != 0) return result;
        else return Integer.compare(this.weight, o.weight);
    } 
}

Тогда вы можете просто позвонить:

Arrays.sort(pets)
0
ответ дан Ricola 19 January 2019 в 12:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: