Отбор событий с уникальными типами

Используйте LinkedHashMap с ключом EventType.id и putIfAbsent. Так сохранятся первое событие каждого типа и порядок первого появления типов.

Короткий ответ

Что ответить на собеседовании

Используйте LinkedHashMap с ключом EventType.id и putIfAbsent. Так сохранятся первое событие каждого типа и порядок первого появления типов.

Подробный разбор

Ответ с пояснениями

Условие

Необходимо написать метод, который:

  • получает список событий (List<Event>);
  • возвращает только те события, типы которых уникальны (идентифицируются по EventType.id());
  • при наличии нескольких событий одного типа оставляет первое найденное.
public interface Event {
    String id();
    EventType type();
}

public interface EventType {
    String id();
}

Ответ

Используйте LinkedHashMap с ключом EventType.id и putIfAbsent. Так сохранятся первое событие каждого типа и порядок первого появления типов.

static List<Event> uniqueTypes(List<Event> events) {
    Map<String, Event> result = new LinkedHashMap<>();
    for (Event event : events) {
        Objects.requireNonNull(event);
        String typeId = Objects.requireNonNull(event.type().id());
        result.putIfAbsent(typeId, event);
    }
    return new ArrayList<>(result.values());
}

Импорты из java.util. Тип события и его ID должны быть ненулевыми. Event.id не участвует в уникальности. Время в среднем O(n), память O(k). Distinct по самим Event не подходит, если их equals не определён специально по типу.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее