在我的java程序中,我得到的结果如下
输出:
acre care race
act cat
预期:
act cat
acre care race
现在我想以相反的顺序对 Map 元素进行排序。所以我可以得到像上面这样的结果。我在下面添加了我的代码。
public static void main(String args[]) {
try {
Scanner sc = readWords();
Map<String, List<String>> wordAnagramPairs = new HashMap<>();
wordAnagramPairs = mapAnagrams(sc);
Comparator<List<String>> c = (l1, l2) -> {
Collections.sort(l1);
Collections.sort(l2);
int in = l1.get(0).length() - l2.get(0).length();
if (in == 0) {
return String.join(" ", l1).compareTo(String.join(" ", l2));
} else {
return in;
}
};
List<List<String>> sortedList = wordAnagramPairs.values()
.stream()
.filter(li -> li != null && li.size() > 1)
.sorted(c)
.collect(Collectors.toList());
for(List<String> anagrams : sortedList){
for(String anagram : anagrams){
System.out.print(anagram + " ");
}
System.out.print('\n');
}
} catch (FileNotFoundException e) {
System.out.println("File Not Found");
}
}
最佳答案
通过查看预期的输出,似乎您需要按列表元素的长度排序,然后如果长度相等则按排序后的列表元素排序
按元素长度进行比较,然后列出元素
Comparator<List<String>> c = (l1, l2) -> {
Collections.sort(l1); // elements to be sorted
Collections.sort(l2); // elements to be sorted
int in = l1.get(0).length() - l2.get(0).length();
if (in == 0) {
return String.join(" ", l1).compareTo(String.join(" ", l2));
} else {
return in;
}
};
由于您只想打印值,因此可以对值使用流
Map<String, List<String>> wordAnagramPairs = new HashMap<>();
wordAnagramPairs.put("race", Arrays.asList("race", "care", "acre"));
wordAnagramPairs.put("act", Arrays.asList("act", "cat"));
wordAnagramPairs.values().stream()
.filter(li -> li != null && li.size() > 1)
.sorted(c)
.forEach(System.out::println);
输出
[act, cat]
[acre, care, race]
收集排序结果
List<List<String>> sortedList = wordAnagramPairs.values().stream().filter(li -> li != null && li.size() > 1).sorted(c)
.collect(Collectors.toList());
System.out.println(sortedList);
您还可以使用TreeMap<String, TreeSet<String>>
按键对 map 进行排序,并按设置值对值进行排序
按键排序
wordAnagramPairs.entrySet()
.stream()
.filter(e -> e.getValue().size() > 1)
.sorted(Map.Entry.comparingByKey())
.forEach(System.out::println);
关于java - 对 java Map<String, List<String>> 中的 Map 元素进行逆序排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40570673/