【发布时间】:2020-02-10 11:03:02
【问题描述】:
我在对字符串数组 [] 进行排序时遇到问题,根据其中包含最多字母“p”的字符串,即 s1 (apple) 将在 s2 (ape)... 之前
我正在学习如何实现 Comparator 来执行此操作,然后使用 s1.compareTo(s2) 和 lambda。最大的问题是,我不能以某种方式使用流来做到这一点吗?
这就是我在反向字母排序中为字符串数组 COUNTRIES 所做的操作
Comparator<String> reverseAlphabetic = (s1,s2) -> -s1.compareToIgnoreCase(s2);
Arrays.sort(COUNTRIES,reverseAlphabetic);
System.out.println("\nCountries in reverse alphabetic order");
for (int i=0; i<10;i++)
System.out.println("\t"+COUNTRIES[i]);
【问题讨论】:
-
简短的回答是——是的,你可以
-
切勿在比较器中使用减号。当
compareToIgnoreCase恰好返回Integer.MIN_VALUE时,尝试翻转符号将溢出并再次以Integer.MIN_VALUE结束。当您想颠倒顺序时,只需使用s2.compareToIgnoreCase(s1)。或者使用已经存在的比较器:Comparator<String> reverseAlphabetic = String.CASE_INSENSITIVE_ORDER.reversed();
标签: sorting java-8 java-stream comparator