2017-10-10 74 views
2

我有一個對象列表和一個數組。我的數組有少量客戶選擇的ID(字符串)。我的對象有一個屬性ID。我想通過一組ID來過濾我的列表。有沒有一種方法可以使用謂詞或lambda來過濾它?如何用ID數組過濾對象列表?

public class PaymentDueData { 

    private long paymentScheduleId; 
    private String invoiceNumber; 

} 

String [] selectedInvoices; 
+0

您是否只希望包含與選定發票匹配的付款數據,或將其排除? – azurefrog

+0

包含與所選發票匹配的付款數據 – karim

回答

-1

像這樣的東西很可能是:

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

如果'paymentDueDataCollection'很大,則每次創建一個新流並執行'.anyMatch()'都可能會產生問題。 – Tet

+0

@當然。如果這是一個性能問題 – Eugene

1

首先,我會變成數組selectedInvoicesSet<String>以提高查詢:

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

然後,你需要檢查存在元素ID爲data.getInvoiceNumber()的集合:

(...) 
    .stream() 
    .filter(data -> invoices.contains(data.getInvoiceNumber())) 
    .collect(Collectors.toList()); 
+0

爲什麼轉換爲哈希集?你可以簡單地使用它作爲流。 –

+0

沒錯。但爲什麼不簡單地使用Arrays.binarySearch? –

+0

是啊!我在內存方面想。 –