Моя идея состояла в том, чтобы отсортировать некоторые объекты (которые являются просто целыми числами) по их слоям. Я нашел кого-то, у кого была такая же проблема (я думаю), но я не понял решения. Слои каждого объекта хранятся в массиве. Я использовал перечисление для слоев.
public enum Layer {
DEFAULT,
BACKGROUND,
FOREGROUND,
HUD_0,
HUD_1
}
Поэтому я не знаю, неправильно ли я понял, как работает компаратор, или у меня просто проблемы, потому что сущности являются целыми числами...
final Layer[] layers = {Layer.BACKGROUND, Layer.HUD_1, Layer.DEFAULT, Layer.DEFAULT, Layer.HUD_0, Layer.HUD_1};
TreeSet<Integer> sorted = new TreeSet<Integer>(new Comparator<Integer>() {
@Override
public int compare(Integer entity1, Integer entity2) {
//Integer layer1 = layers[entity1].ordinal();
//Integer layer2 = layers[entity2].ordinal();
//return layer1 < layer2 ? -1 : (layer1 > layer2 ? 1 : 0);
return layers[entity1].compareTo(layers[entity2]);
}
});
sorted.add(0);//bg
System.out.println(sorted.toString());
sorted.add(4);//hud0
System.out.println(sorted.toString());
sorted.add(2);//def
System.out.println(sorted.toString());
sorted.add(3);//def
System.out.println(sorted.toString());
sorted.add(1);//hud1
System.out.println(sorted.toString());
sorted.add(5);//hud1
System.out.println(sorted.toString());
Это результат:
[0]
[0, 4]
[2, 0, 4]
[2, 0, 4]
[2, 0, 4, 1]
[2, 0, 4, 1]
последний на самом деле должен быть [2, 3, 0, 4, 1, 5]
Я читал, что TreeSet хранит каждый элемент только один раз, поскольку это набор, но я не знаю, почему для этого используется слой, а не объекты, которые я действительно хочу вставить.