Используйте 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 не определён специально по типу.