JAVA Guava /集合: How to use a predefined list as a predicate to sort another list by?

标签 java sorting collections guava

所以我有一个像这样的列表 ['A', 'Z', 'D', 'E', 'B', 'H', 'C'],我做了一些事情(这个事情是为了目的这个问题不可改变)我得到 [{id:D, num:5},{id:A,num:5}, {id:C,num:3}, {id:Z,num:3} ] 我想保留它按 num 字段排序的事实,并且返回总是已经按 num 字段排序。但现在我想在该排序中进行排序以保留原始列表顺序,以便我想要的输出是:

[{id:A, num:5},{id:D,num: 5},{id:Z, num:3},{id: C, num:3}]

我不太擅长 fluentiterables/guava 等,但我觉得这些是可行的方法。谁能给我一个具体的例子?

最佳答案

为了使用预定义列表作为排序顺序,有 Ordering.explicit(List) .您可以将其与 Ordering.onResultOf(Function) 结合使用按 id 字段对输出列表进行排序。

要将按 num 字段排序与按 id 字段排序组合,您可以使用 Ordering.compound(Comparator) .

因此,所需的 Ordering 实例的完整定义大致如下所示:

Ordering.natural().onResultOf(extractNumFunction)
        .compound(Ordering.explicit(inputList).onResultOf(extractIdFunction))

也许您需要添加泛型类型信息。

然后您可以使用此 Ordering 实例作为 Collections.sort(List, Comparator) 的参数,或使用类似 Ordering.sortedCopy(Iterable) 的方法.

关于JAVA Guava /集合: How to use a predefined list as a predicate to sort another list by?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31617800/

相关文章:

swift - 写入嵌套字典 (Swift 4)

java - 从 SQLite 数据库读取数据到一个新的 Activity - Android Studio

java - 汉宁(von Hann)窗

java - 基于单独列表对列表进行排序

javascript - 如何比排序更快地找到数组的最大子集?

java - Java 中具有自动索引的集合

java - 为什么这个 while 循环陷入无限循环?

javax.net.ssl.SSLKeyException : [Security:090477]Certificate chain received from intranet. xxx.com

java - 如何对 List<Integer> 进行排序?

java - 从 Map 的键/值 subview 中删除元素?