我想让一些东西看起来像字典,其中有很多单词以不同的字母开头。如何使用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;
}
}
首先,
我建议不要在toString()
方法中使用Collections.sort()
。除此之外,您应该使用StringBuilder来生成字符串。阅读此内容以获取更多详细信息。
除此之外,您可以使用新变量来检查下一个单词是否以不同的字符开头:
@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