好的。所以我有一个映射的数组列表<字符串,整数>:
Set<Map.Entry<String, Integer>> wordSet = map.entrySet();
List<Map.Entry<String, Integer>> wordList = new ArrayList<>(wordSet);
wordList.sort((w1, w2) -> w2.getValue().compareTo(w1.getValue()));
正如您在这里看到的,这种排序将仅基于Map<K、 V>。我想修改lambda表达式,使其PRIMARY检查最大值,SECONDARY检查字母顺序。然而,我不知道如何以这种有Primary和Secondary两种方式的方式创建lambda表达式。
请改用Comparator实用程序方法。将当前替换为:
wordList.sort(Comparator.comparing(Map.Entry::getValue))
这个实用程序方法生成一个比较器,它做您的比较器所做的事情:通过调用getValue映射两个条目,然后比较该对象。
所有比较器都有一个.thenComparing
方法:
Comparator<Map.Entry<String, Integer>> secondOrder = Comparator.comparing(e -> e.getKey());
wordList.sort(Comparator.comparing(Map.Entry::getValue).thenComparing(secondOrder));
这将在值上进行比较,如果值相等,则在键上进行比较。你可以随心所欲地进行比较。
似乎需要按值((降序对映射条目进行排序,然后按字母顺序按键(单词(对进行排序。
Map.Entry
有自己的静态比较器方法Map。条目::comparingByValue和Map。条目::comparingByKey,可使用Comparator::thenComparing
:加入
wordList.sort(Map.Entry.<String, Integer>comparingByValue(Comparator.reverseOrder())
.thenComparing(Map.Entry.comparingByKey()));
此外,可以使用Comparator::reversed
代替Comparator::reverseOrder
:
wordList.sort(Map.Entry.<String, Integer>comparingByValue()
.reversed()
.thenComparing(Map.Entry.comparingByKey())
);