Java 如何通过ID数组过滤对象列表?

Java 如何通过ID数组过滤对象列表?,java,java-8,Java,Java 8,我有一个对象列表和一个数组。我的阵列中只有少量客户选择的ID(字符串)。我的对象有一个属性ID。我想通过ID数组筛选我的列表。有没有一种方法可以使用谓词或lambda过滤它 public class PaymentDueData { private long paymentScheduleId; private String invoiceNumber; } String [] selectedInvoices; 很可能是这样的: paymentDueDataColl

我有一个对象列表和一个数组。我的阵列中只有少量客户选择的ID(字符串)。我的对象有一个属性ID。我想通过ID数组筛选我的列表。有没有一种方法可以使用谓词或lambda过滤它

public class PaymentDueData {

    private long paymentScheduleId;
    private String invoiceNumber;

}

String []  selectedInvoices;

很可能是这样的:

 paymentDueDataCollection.stream()
                         .filter(x -> Arrays.stream(selectedInvoices)
                               .anyMatch(y -> y.equals(x.getInvoiceNumber()))
                         .collect(Collectors.toList());

首先,我将把数组
selectedInvoices
转换为
集合
,以增强查找能力:

HashSet<String> invoices = new HashSet<>(Arrays.asList(selectedInvoices));

是否只包括与所选发票匹配的付款数据,还是将其排除?通过转换为哈希集,包括与所选发票匹配的付款数据?您可以简单地将其用作stream.right。但是为什么不简单地使用数组。二进制搜索?是的!我是从记忆的角度考虑的。有了这个解决方案,你最终总是会得到一个空的列表。请注意,
new ArrayList().stream()
将始终检索空流。您将实例化一个新列表和一个HashSet。。。如何优化此内存?如果
paymentDueDataCollection
很大,则每次创建一个新流并执行
.anyMatch()
可能会有问题。
(...)
    .stream()
    .filter(data -> invoices.contains(data.getInvoiceNumber()))
    .collect(Collectors.toList());