[英]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.