Как я могу сохранить самую последнюю запись в списке <Object>и удалить предыдущие записи, которые имеют идентичное поле? - PullRequest
0 голосов
/ 26 марта 2020

У меня есть список, который содержит записи различных объектов CallLog. Каждый CallLog отличается, и когда я передаю это в свой ListView, каждый журнал правильно отображается на моем экране. Однако я хочу удалить журналы с тем же атрибутом RemoteAddress (т. Е. Человек, который позвонил мне или получил вызов, должен появляться в моем ListView только один раз). Это потому, что я буду отображать все данные журнала для этого удаленного контакта прямо под ним.

Как я могу создать метод (или класс), который мог бы отфильтровать мой список, чтобы сохранить только уникальные удаленные адреса? Ниже показано, как я получаю этот список журналов из ядра. Он имеет форму CallLog []:

// Filter this
List<CallLog> mLogs = Arrays.asList(LinphoneManager.getCore().getCallLogs());

1 Ответ

0 голосов
/ 27 марта 2020
List<CallLog> mLogs = Stream.<CallLog>of(LinphoneManager.getCore().getCallLogs())
            .collect(ArrayList::new, 
                (a, l) -> { if (!a.stream().anyMatch(o -> ((CallLog) o).remoteaddress.equals(l.remoteaddress))) a.add(l); }, 
                (a, b) -> { a.addAll(b); })

Вы пробовали что-то подобное раньше? Вы можете использовать метод set вместо add.

...