Создать уникальную коллекцию (типа String) активных (атрибут Item.active со значением true) имен (атрибут Item.name), используя в качестве входных данных список items

1. Получить уникальные имена активных элементов

Условие задачи:
Дан список объектов Item.

Необходимо с помощью Stream API получить коллекцию уникальных имён (Item.name) только тех элементов, у которых active = true.

Код:

@Getter
@Setter
class Item {
    private final Long id;
    private String name;
    private boolean active;

    public Item(Long id) {
        this.id = id;
    }
}

List<Item> items = ...;

Collection<String> result = items.stream()...;

Спойлеры к решению

Подсказки
💡 Через filter() оставь только активные элементы.
💡 Через map() преобразуй Item в его имя.
💡 Для получения уникальных значений собери результат в Set.

Решение
Collection<String> result = items.stream()
        .filter(Item::isActive)
        .map(Item::getName)
        .collect(Collectors.toSet());

Сначала:

.filter(Item::isActive)

оставляет только элементы с active = true.

Затем:

.map(Item::getName)

преобразует каждый Item в его имя.

Наконец:

.collect(Collectors.toSet())

собирает имена в Set, поэтому повторяющиеся значения автоматически исключаются.

Если порядок элементов важен, можно собрать результат в LinkedHashSet:

Collection<String> result = items.stream()
        .filter(Item::isActive)
        .map(Item::getName)
        .collect(Collectors.toCollection(LinkedHashSet::new));

Временная сложность в среднем — O(n), дополнительная память — O(k), где k — количество уникальных имён активных элементов.