簡體   English   中英

如何使用 Collections.sort 打印單詞集合並打印單詞的第一個字母

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM