Определение вашего типа:
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"`
}
Сначала вы реализуете интерфейс 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);
Если вы хотите отсортировать массив 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;
}
В качестве альтернативы, вы можете изменить свой класс для реализации Сравним и реализуем метод 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)