#java
#java
Вопрос:
У меня есть 2 билета на массив и filterTickets, я хочу вернуть новые билеты, которые не содержат элемента из filterTickets. Я использую этот код, но фильтр не работает.
List < Ticket > a = new ArrayList <>();
for (String string: ticketsFilter) {
for (Ticket ticket: tickets) {
if (ticket.getTicketId().equals(string))
a.add(ticket);
}
}
Комментарии:
1. Я думал, вы хотите добавить в,
a
если его нет вticketsFilter
списке. В любом случае, переверните два цикла, затем замените внутренний цикл вызовомcontains
. Это дало бы вам:for (Ticket ticket : tickets) { if (! ticketsFilter.contains(ticket.getTicketId())) { a.add(ticket); } }
— Для повышения производительности,ticketsFilter
должно бытьSet
, а неList
.2. Я также использую not, но это также возвращает все элементы без фильтра
3. Java 8 список путей<Билет> filteredTickets = tickets.stream().filter(t -> ticketsFilter.stream().anyMatch(s-> s.equals(т.getTicketId())).собирать(коллекторы. ToList());
Ответ №1:
Из вашего описания следует, что у вас должен быть filterTickets, который представляет собой список строк, затем вы можете использовать следующий код, чтобы проверить, содержит ли filterTickets идентификатор билета:
List<String> ticketsFilter = new ArrayList<>();
...
if(!ticketsFilter.contains(ticket.getTicketId())){
a.add(ticket);
}
Комментарии:
1. Лучше использовать
Set<String> ticketsFilter = new HashSet<>();
.Set
работаетcontains
алгоритмически быстрее (здесь постоянное время), чем любая реализацияList
.2. не могли бы вы вставить свой код сюда или обновить в вопросе? это должно сработать в моем понимании вашего вопроса
Ответ №2:
Решение Java 8 с использованием stream API:
List<Ticket> a = tickets.stream()
.filter(e->!ticketsFilter.contains(e.getTicketId()))
.collect(Collectors.toList());
Комментарии:
1. но поддерживает ли это API 19, потому что в Android Studio, когда я использую его, эта информация говорит о вызове API 24
2. @Andrinovariswanto В вашем вопросе даже не упоминалось, что это для Android, поэтому этот ответ имеет отношение к вопросу в его нынешнем виде.
3. Ааааа, кстати, спасибо, чувак