Фильтровать карту по значениям в Java? - PullRequest
0 голосов
/ 12 мая 2018

У меня есть карта, где значения GregorianCalendar / String и ключи Reminder / Contact:

private final Map<Object, Object> elements = new HashMap<>();

Другой список:

List<Reminder> result = new ArrayList<Reminder>

Я хотел бы отфильтровать карту и создать список по темам напоминаний.

public class Reminder {
    String name;

    String theme;
    ...
}

Я создал такой метод, но он не работает.Метод getTheme() не определен для типа Object.

public List<Reminder> filterReminderByTheme(String theme) {
    result = elements.values()
            .stream()
            .filter(reminder -> theme.equals(reminder.getValue().getTheme()))
            .collect(Collectors.toList());
    return result;
}

Какая-нибудь идея?

Ответы [ 2 ]

0 голосов
/ 12 мая 2018

Прежде чем проверять тему, убедитесь, что значение Reminder. Ссылка, которую вы используете, является Object, и вы не сможете использовать методы Reminder, даже если эти методы определены внутри базового объекта.

Сначала вы должны разыграть его. Чтобы разыграть его, вы должны сначала убедиться, что это действительно instanceof целевой класс.

public List<Reminder> filterReminderByTheme(String theme) {
    result = elements.values()
            .stream()
            .filter(value -> value instanceof Reminder 
                                   && theme.equals(((Reminder)value).getTheme()))
            .collect(Collectors.toList());
    return result;
}
0 голосов
/ 12 мая 2018

и ключи: Напоминание / Контакт:

Java считает, что они являются только объектами ... То же самое для значений

Map<Object, Object> elements 

Я предлагаю переопределитькарта должна иметь соответствующие типы и elements.values() будет типом справа, поэтому, если вы хотите, чтобы они были в качестве списка значений, это не должен быть ключ

Map<String, Reminder> elements

При этом фильтрбудет

.filter(reminder -> theme.equals(reminder.getTheme()))
...