Мне нужно отсортировать список элементов на основе списка фильтров, которые упорядочены по приоритету.Однако эти фильтры поступают из тела запроса API, поэтому они могут меняться.
У меня есть класс фильтров
public class Filter {
private String fieldName;
private String order;
// Getters and Setters...
}
Некоторые объекты фильтров
Filter filter1 = new Filter("price", "desc");
Filter filter2 = new Filter("size", "asc");
Мой товарКласс выглядит так:
public class Item {
private String productName;
private double size;
private double price;
// Getters and Setters...
}
Затем я должен отсортировать элементы следующим образом:
Если Item.price равен следующему элементу, сравнить их размер и т. д. ...
Я уже пытался создать Comparator для каждого фильтра, но я не могу связать их в цепочку, поэтому каждый фильтр сортирует список самостоятельно, независимо от предыдущего метода сортировки (иногда переворачивая весь список вверхвниз).
Я также пытался реализовать интерфейс Comparable в классе Item, но метод интерфейса compareTo
принимает только один параметр (следующий элемент), но не список правил.
Итак, учитывая список элементов, таких как
List<Item> items = new ArrayList<Item>(
new Item("foo", 10.0, 5.0),
new Item("bar", 6.0, 15.0),
new Item("baz", 7.0, 5.0)
);
и список фильтров, таких как
List<Filter> filters = new ArrayList<Filter>(
new Filter("price", "desc"),
new Filter("size", "asc")
);
, я ожидаю, что результат будет
List<Item> sortedItems = new ArrayList<Item>(
new Item("bar", 6.0, 15.0),
new Item("baz", 7.0, 5.0),
new Item("foo", 10.0, 5.0)
);
Не могли бы вы помочь мне?Заранее спасибо!
ВАЖНО: У меня нет проблем со сравнением самих полей.Моя проблема заключается в создании динамического компаратора, который меняет свои сравнения на основе списка фильтров.