Есть массив со словами, как вывести слова в массиве по алфавиту и посчитать сколько одинаковых слов, например:
String[] words = {"a", "a", "at", "but", "down", "he", "wolf", "wolf"};
Возможно ли вывести массив через циклы или надо писать кучу if
? У меня получилось так:
private void sortWords() {
String[] words = {"a", "a", "at", "but", "down", "he", "wolf", "wolf"};
char q;
for (int i = 0; i < words.length; i++) {
for (char j = 'a'; j <= 'z'; j++) {
q = words[i].charAt(0);
if (q == j) {
System.out.println(j + ": " + words[i] + " - " + (i + 1));
}
}
}
}
Вариант с использованием TreeMap
и stream api
:
String[] words = {"a", "a", "at", "but", "down", "he", "wolf", "wolf"};
TreeMap<String, Integer> wordsQuantity = new TreeMap<>();
Arrays.stream(words).forEach(word -> {
int quantity = wordsQuantity.getOrDefault(word, 0);
wordsQuantity.put(word, quantity + 1);
});
System.out.println(wordsQuantity); // {a=2, at=1, but=1, down=1, he=1, wolf=2}
В данном случае порядок слов определяется компаратором по умолчанию natural ordering
, т.е. по алфавиту, а чтоб совсем как в задаче было, можно еще один stream
добавить:
wordsQuantity.forEach((word, quantity) ->
System.out.println(word.charAt(0) + ": " + word + " - " + quantity));
// a: a - 2
// a: at - 1
// b: but - 1
// d: down - 1
// h: he - 1
// w: wolf - 2
UPD: Немного допилил (спасибо @And) - можно одним stream
обойтись, и работает быстрее:
String[] words = {"a", "a", "at", "but", "down", "he", "wolf", "wolf"};
Arrays.stream(words)
.collect(Collectors.groupingBy(e -> e, TreeMap::new, Collectors.counting()))
.forEach((word, quantity) ->
System.out.println(word.charAt(0) + ": " + word + " - " + quantity));
// a: a - 2
// a: at - 1
// b: but - 1
// d: down - 1
// h: he - 1
// w: wolf - 2
String[] words = {"a", "a", "at", "but", "down", "he", "wolf", "wolf"};
Arrays.stream(words)
.collect(Collectors.groupingBy(e -> e, Collectors.counting()))
.entrySet()
.stream()
.sorted(Map.Entry.comparingByKey())
.forEachOrdered(action -> {
String name = action.getKey();
System.out.println(name.charAt(0) + ": " + name + " - " + action.getValue());
});
Вывод:
a: a - 2
a: at - 1
b: but - 1
d: down - 1
h: he - 1
w: wolf - 2
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Есть таблица постов post от пользователей такого вида:
Есть приложение с БД MySQL (пользователь из интерфейса приложения БД изменять не может, только читать данные из нее), кроме того, некоторые настройки...