gpt4 book ai didi

java - 如何在 Guava 订购中找到哪个比较器 'broke the tie'

转载 作者:搜寻专家 更新时间:2023-11-01 03:10:38 25 4
gpt4 key购买 nike

我使用 Guava 的 Ordering 类来执行排序以从给定列表中选择“最佳”。它看起来像这样:

// Create the Ordering, with a list of Comparators
Ordering<String> ranker = Ordering.compound(ImmutableList.of(
STRING_LENGTH,
PERCENTAGE_UPPERCASE,
NUMBER_OF_VOWELS));

// Use the ordering to find the 'best' from a list of Strings
String best = ranker.max(asList("foo", "fooz", "Bar", "AEro"));

通过这种排序,字符串“AEro”是最好的,因为它是最长的,与“fooz”并列最好,但大写字符比例更高。

我正在寻找一种方法来判断哪个Comparator“打破了平局”,在这个愚蠢的人为示例中就是比较器PERCENTAGE_UPPERCASE

我有一个可行的解决方案,但它不是特别优雅,并且意味着复制 Comparator 的列表。就是利用Ordering提供一个排序列表(Ordering.sortedCopy),拉取前两个元素(当然是范围检查),遍历一个相同的List Comparator,比较这两个元素,当 compareTo 方法返回非零结果时中断。

有没有更简洁的方法?

最佳答案

这里是 Guava 贡献者。

您的解决方案看起来几乎和您将要得到的一样好,但与其进行排序副本并提取前两个元素,您应该更高效

List<E> best2 = ranker.greatestOf(list, 2);

然后,实际上,遍历比较器,尽管您可能会重构,以便重新使用 Ordering.compound 中的比较器列表,而不是重新创建它。

关于java - 如何在 Guava 订购中找到哪个比较器 'broke the tie',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11226623/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com