@antokqer

Как перевести Collection в HashMap где K — lenght, а V — колличество строк с такой длиной?

Это то что написал, кей - длина строки, но никак не могу понять как найти колличество строк с нужной длиной символов и передать в значение Map

public void map(String... array) {
        HashMap<Integer, Integer> hashMap = new HashMap<>();
        Collection <String> collection = Arrays.asList(array);
        HashMap<String, String> map =
                collection.stream()
                        .collect(Collectors.toMap(i -> i.length(), (i -> filter(i -> i.length())));


Пробовал через цикл, но не могу передать переменную в лямбда

System.out.println("map = " + map);
        for (String string : collection) {
            int key = string.length();
            int value = collection.stream().filter( i -> (i.lenght() = key));
            hashMap.put(key,value);
  • Вопрос задан
  • 61 просмотр
Решения вопроса 3
zagayevskiy
@zagayevskiy Куратор тега Java
Android developer at Yandex
Смысл такой - изначально создать пустую Мапу. Затем один раз пройти по списку строк, и для каждой строки:
* посчитать её длину - x
* взять из мапы значение по ключу х - y
* если y == null, то записать в мапу по ключу х значение 1
* иначе записать в мапу по ключу х значение y + 1

В итоге получится нужная тебе мапа. Удачи.
Ответ написан
@Kot1que
final List<String> strings = List.of("1", "2", "3", "11", "22", "333");

final Map<Integer, Long> result = strings.stream()
                .collect(Collectors.groupingBy(String::length, Collectors.counting()));
//{1=3, 2=2, 3=1}


изменено: добавил полный пример
Ответ написан
xez
@xez Куратор тега Java
Senior Junior Roo
var strings = List.of("1", "2", "3", "11", "22", "333");
var map = strings.stream()
                 .collect(Collectors.toMap(String::length, s -> 1, Integer::sum));
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы