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

时间:2019-04-15 17:01:46

标签: java collections

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

1 个答案:

答案 0 :(得分:0)

首先,我建议不要对Collections.sort()方法中的文件使用toString()。除此之外,您还应该使用StringBuilder生成String。阅读this了解更多详细信息。

此外,您可以使用新变量检查下一个单词是否以其他字符开头:

@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