[英]How can i use Collections.sort to print a collection of words and print the first letter of the word
我想让一些东西看起来像一本字典,里面有很多以不同字母开头的单词。 如何使用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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.