Сортировка Arraylist по полю с учетом значения другого поля
Необходимо отсортировать ArrayList по одному полю при этом учитывая значение другого поля. Имеем:
public class OrderProcessor {
public Order order;
private List<Order> listOrder = new ArrayList<>();
public List<Order> process(String shopId) {
List<Order> sortedList = new ArrayList<>();
for (Order sortTime : listOrder) {
if (shopId == null) {
sortedList.add(sortTime);
} else if (sortTime.getShopId().equals(shopId)) {
sortedList.add(sortTime);
}
}
sortedList.sort(new Order.ShopIdComparator());
return sortedList;
}
}
public class Order {
public String shopId;
public String orderId;
public String customerId;
public LocalDateTime datetime;
public List<OrderItem> items;
public double sum;
public static class ShopIdComparator implements Comparator<Order> {
@Override
public int compare(Order o1, Order o2) {
return o1.datetime.compareTo(o2.datetime);
}
}
}
На данный момент в методе process я реализовал сортировку по datetime, которая учитывает параметр shopId, приходящий в метод - он может быть как String строка, так и null. Сортировка рабочая, но в ней приходится перегонять данные из listOrder в sortedList, что не очень хорошо.
Сколько не искал, не нашел подсказки, как сделать сортировку, которая бы сортировала по полю datetime, при этом опираясь на значение shopId. Соответственно, если значение shopId не null, то сортируем и выводим только данные, соответствующие данному shopId, а если null, то сортируем и выводим все данные, без учета shopId. Подскажите пожалуйста, как это реализовать?