Прежде всего, я бы порекомендовал не использовать 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