Джава. Метод для выделения группы объектов по признаку

106
07 сентября 2021, 21:20

Я чайник. Есть массив объектов, как выделить из массива объекты, которые имеют общий признак (поле)? (например, человек - объект имеющий поля "имя" и "рост", как выделить людей у которых совпадает рост чтобы, допустим, вывести их в консоль?)

P.S: Наверное, я ужасно изъясняюсь, извините :c

Answer 1

Если я правильно понял вопрос, то ниже - примерный код.

См. метод groupByHeight и комментарии в нём.

class Human {
    public String name = "";
    public int height;
    public String toString() {
        return name;
    }
    public static void groupByHeight(Human[] humans) {
        // Создаём мапу `grouped`, где ключом является рост.
        Map<Integer, List<Human>> grouped = new HashMap<>();
        // Каждый элемент массива помещаем в список, соответствующий его росту.
        for (Human h: humans) {
            grouped.putIfAbsent(h.height, new ArrayList<>());
            grouped.get(h.height).add(h);
        }
        // Пробегаем по всем ключам мапы и выводим список объектов с соотв-м ростом.
        for (int height: grouped.keySet()) {
            System.out.println("Humans with height " + height ": " + grouped.get(height));
        }
    }
}

Метод выведет списки для всех вариантов роста.

Если интересует только конкретный рост - можно его просто запросить из построенной мапы: grouped.get(requestedHeight). Впрочем в этом случае можно и вовсе без мапы обойтись.

READ ALSO
Добавление объекта ImageIcon в документ Word

Добавление объекта ImageIcon в документ Word

Скажите, имеется ли техническая возможность вставить изображение ImageIcon в документ Word с помощью Apache Poi?

161
как сделать проверку на повторяющееся число из массива?

как сделать проверку на повторяющееся число из массива?

Есть функция, она выводит рандомное число из массиваКак сделать проверку на выводило ли это число раньше?

113
Настройка горячих клавиш WebStorm

Настройка горячих клавиш WebStorm

Не могу понять, но у меня не работает ctrl + C, если я нажимаю эту комбинацию то ничего не копируется, пропадает выделение, а самое противное, что...

156
Вывести вместо даты слово &quot;вчера&quot;

Вывести вместо даты слово "вчера"

Не получается вывести "вчера", с "сегодня" и остальными датами проблем нет

121