繁体   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