【发布时间】:2020-06-08 03:54:35
【问题描述】:
我在对单词的字母进行排序时遇到问题,按字母出现的次数,如果字母出现相同的次数,它至少会按字典顺序排序。 我有一个代码,但我在网站上得到编译错误和 0 分,因为他们使用 java 7,我不知道如何在没有“lambda”的情况下解决问题的最后一部分。
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class prog {
public static void main(String[] args) throws IOException {
String testString = " ";
BufferedReader rd = new BufferedReader(new InputStreamReader(System.in));
testString = rd.readLine();
Map < Character, List < Character >> map = new HashMap < > ();
for (int i = 0; i < testString.length(); i++) {
char someChar = testString.charAt(i);
if (someChar == ' ') {
continue;
}
char ch = testString.charAt(i);
List < Character > characters =
map.getOrDefault(Character.toLowerCase(ch), new ArrayList < > ());
characters.add(ch);
map.put(Character.toLowerCase(ch), characters);
}
List < Map.Entry < Character, List < Character >>> list =
new ArrayList < > (map.entrySet());
list.sort((o1, o2) - > {
if (o1.getValue().size() == o2.getValue().size()) {
return o1.getKey() - o2.getKey();
}
return o2.getValue().size() - o1.getValue().size();
});
list.forEach(entry - > entry.getValue().forEach(System.out::print));
}
}
【问题讨论】:
-
什么网站?你就不能选择你要使用的java版本吗?
-
无论如何,您必须实现自己的
Comparator,使用Collections.sort()并将forEach重写为一个简单的循环。并用map.getOrDefault更改部分。 -
Java 8 现在已经过时了。你应该向网站报告。他们不支持它和未来的稳定版本,这是在伤害他们的顾客。
-
@STRKLok 您可能需要重新考虑在您的
comparator实现中返回减去的值。它并不总是有效,并且可能导致陷阱。最好根据需要返回显式值 1、-1 或 0。
标签: java algorithm lambda bufferedreader bufferedwriter