我正在尝试使用以下规则对列表进行排序:
已知值应排在未知值之前。
已知值应按单独定义的键排序。
未知值应按其自然顺序排序。
我有 (1) 和 (2),只是在努力将 (3) 添加到组合中。
到目前为止,我有这个:
List<String> values = Arrays.asList(
"red", "orange", "yellow", "green", "blue", "indigo", "violet");
ImmutableMap<String, Integer> map = ImmutableMap.of("red", 1, "green", 2, "blue", 3);
Ordering<String> order = Ordering.natural()
.nullsLast()
.onResultOf(Functions.forMap(map, null));
Collections.sort(values, order);
System.out.println(values);
其中产生:
[red, green, blue, orange, yellow, indigo, violet]
但是最后 4 个是按原始顺序排列的,而我希望它们按自然顺序排序:
[red, green, blue, indigo, orange, violet, yellow]
我唯一能想到的是编写我自己的自定义函数,它在地图中查找内容并将地图结果添加到原始值,如果未找到则使用地图大小 - 例如它会返回:
"1-red", "4-orange", "4-yellow", "2-green", "3-blue", "4-indigo", "4-violet"
但这仅在映射值是整数时才有效,并且需要数字格式以在“10”之前排序“02”等。
任何人都有更好的方法来实现这一目标?
慕仙森
相关分类