Как я могу использовать Collections.sort, чтобы напечатать коллекцию слов и напечатать первую букву слова - PullRequest
0 голосов
/ 15 апреля 2019

Я хочу, чтобы что-то выглядело как словарь, в котором много слов, начинающихся с разных букв. Как я могу использовать 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 голосов
/ 15 апреля 2019

Прежде всего, я бы порекомендовал не использовать Collections.sort() в поле вашего toString() метода. Кроме того, вы должны использовать StringBuilder для вашего поколения String. Прочитайте это для получения более подробной информации.

Кроме того, вы можете использовать новую переменную, чтобы проверить, начинается ли следующее слово с другого символа:

@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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...