我想使东西看起来像字典,里面有很多以不同字母开头的单词。如何使用Collections.sort()
,以便可以对所有单词进行排序并打印有关下一个字母的信息。结果应如下所示:
Words starting by A:
AAA
AAB
ABB
ABC
Words starting by B:
BAA
BAB
BBB
BBC
那是我的代码:
public Dictionary(){
private ArrayList<String> words;
@Override
public String toString(){
Collections.sort(words);
String str = "";
for(int i = 0; i< words.size() ; i++){
str += words.get(i) + "\n";
}
return str;
}
}
答案 0 :(得分:0)
首先,我建议不要对Collections.sort()
方法中的文件使用toString()
。除此之外,您还应该使用StringBuilder生成String。阅读this了解更多详细信息。
此外,您可以使用新变量检查下一个单词是否以其他字符开头:
@Override
public String toString() {
Collections.sort(words);
StringBuilder result = new StringBuilder();
String startCharacter = null;
for (String word : words) {
if (startCharacter == null || !word.startsWith(startCharacter)) {
startCharacter = word.substring(0, 1);
result.append("Words starting by ").append(startCharacter).append(":\n");
}
result.append(word).append("\n");
}
return result.toString();
}
或者,您可以使用Java Stream API:
@Override
public String toString() {
return words.stream()
.sorted()
.collect(Collectors.groupingBy(word -> word.substring(0, 1), LinkedHashMap::new, Collectors.joining("\n")))
.entrySet().stream()
.map(e -> "Words starting by " + e.getKey() + ": \n" + e.getValue())
.collect(Collectors.joining("\n"));
}
两种情况下的结果均为:
Words starting by A:
AAA
AAB
ABB
ABC
Words starting by B:
BAA
BAB
BBB
BBC