我在排序列表时遇到问题,我完成了给定练习中的所有任务,但是这对我来说没有任何意义,我想修复它。因此,我有一个名单,例如正在排队等候药房的人。怀孕的人应该优先于所有人,其次是60岁以上的人。一切正常,除了最先出现的年龄大于60岁的人落后于后来的年龄大于60岁的人(我只需要它与FIFO规则一起工作,并按预期的标准工作即可)。 / p>
我首先使用ElasticSearchTemplate
方法对列表进行排序,然后使用我创建的外部比较器类对列表进行排序。
mongoTemplate.updateMulti(Query,Update,Class)
private UpdateQuery updateExistingDocument(String Id) {
// Add updatedDateTime, CreatedDateTime, CreateBy, UpdatedBy field in existing documents in Elastic Search Engine
UpdateRequest updateRequest = new UpdateRequest().doc("UpdatedDateTime", new Date(), "CreatedDateTime", new Date(), "CreatedBy", "admin", "UpdatedBy", "admin");
// Create updateQuery
UpdateQuery updateQuery = new UpdateQueryBuilder().withId(Id).withClass(ElasticSearchDocument.class).build();
updateQuery.setUpdateRequest(updateRequest);
// Execute update
elasticsearchTemplate.update(updateQuery);
}
compareTo()
结果:
public class Main {
public static void main(String[] args) {
List<Customer> pharmacyQueue = new ArrayList<>();
CustomerComparator customerComparator = new CustomerComparator();
pharmacyQueue.add(new Customer(25, false, "Przemek"));
pharmacyQueue.add(new Customer(35, true, "Anita"));
pharmacyQueue.add(new Customer(55, false, "Wiesława"));
pharmacyQueue.add(new Customer(25, true, "Maryja"));
pharmacyQueue.add(new Customer(85, false, "Halinka"));
pharmacyQueue.add(new Customer(55, false, "Stasia"));
pharmacyQueue.add(new Customer(20, true, "Marta"));
pharmacyQueue.add(new Customer(65, false, "Bożenka"));
pharmacyQueue.add(new Customer(75, false, "Paoasdo"));
Collections.sort(pharmacyQueue);
Collections.sort(pharmacyQueue, customerComparator);
System.out.println("Sorted queue: ");
for (Customer c : pharmacyQueue){
System.out.println(c);
}
}
}
答案 0 :(得分:2)
为此,您基本上需要两件事:
Collections.sort()
一定很稳定答案 1 :(得分:0)
正如注释中指出的那样,对列表进行两次排序与仅使用第二次排序(只是速度较慢)相同。哦,诸如QuickSort之类的许多种类都是不稳定的(重新排列绑定值),而诸如MergeSort之类的其他种类都是稳定的。
您要组合比较器(或比较器和可比较的)。幸运的是(从1.8开始),使用java.util.Comparator
static <T extends Comparable<? super T>> Comparator<T> naturalOrder()
default Comparator<T> thenComparing(Comparator<? super T> other)
找到正确的方法作为练习。