Java 过滤阵列列表

Java 过滤阵列列表,java,Java,我有两个数组 票和过滤袋 我想退回不包含filterTickets会员的新票证。 我使用此代码,但过滤器不工作 Lista=newarraylist(); for(字符串:ticketsFilter){ 票(票:票){ if(ticket.getTicketId().equals(string)) a、 加(票); } } 根据您的描述,您应该有一个filterTickets,它是一个字符串列表,然后您可以使用以下代码检查filterTickets是否包含ticketId: List<S

我有两个数组 票和过滤袋 我想退回不包含filterTickets会员的新票证。 我使用此代码,但过滤器不工作

Lista=newarraylist();
for(字符串:ticketsFilter){
票(票:票){
if(ticket.getTicketId().equals(string))
a、 加(票);
}
}

根据您的描述,您应该有一个filterTickets,它是一个字符串列表,然后您可以使用以下代码检查filterTickets是否包含ticketId:

 List<String> ticketsFilter = new ArrayList<>();
 ...
 if(!ticketsFilter.contains(ticket.getTicketId())){
     a.add(ticket);
 }
List ticketsFilter=new ArrayList();
...
如果(!ticketsFilter.contains(ticket.getTicketId())){
a、 加(票);
}

使用流API的Java 8解决方案:

List<Ticket> a = tickets.stream()
                .filter(e->!ticketsFilter.contains(e.getTicketId()))
                .collect(Collectors.toList());
List a=tickets.stream()
.filter(e->!ticketsFilter.contains(e.getTicketId()))
.collect(Collectors.toList());

我以为如果
ticketsFilter
列表中没有
的话,您想添加到
a
。无论如何,翻转两个循环,然后用调用
contains
替换内部循环。这将使您:
for(Ticket-Ticket:tickets){if(!ticketsFilter.contains(Ticket.getTicketId()){a.add(Ticket);}}
——为了获得更好的性能,
ticketsFilter
应该是一个
集,不是一个
列表
。我也使用它,但它返回所有不带过滤器的成员。我还使用了一个8路列表filteredTickets=tickets.stream().filter(t->tickets filter.stream().anyMatch(s->s.equals(t.getTicketId()).collect(Collectors.toList());但它是否支持API 19,因为在android studio中,当我使用它时,信息会说调用API24@Andrinovariswanto你的问题甚至没有提到这是针对Android的,所以这个答案与当前的问题相关。啊,谢谢你,最好使用
Set ticketsFilter=new HashSet();
Set
服务
包含的
算法比
列表的任何实现都要快(此处为常数时间)。请将您的代码粘贴到此处或更新问题中,好吗?这应该可以帮助我理解您的问题