如何使用 Collections.sort 打印单词集合并打印单词的第一个字母



我想让一些东西看起来像字典,其中有很多单词以不同的字母开头。如何使用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

最新更新