2017-10-10 2 views
2

私はオブジェクトリストと配列を持っています。私の配列には、顧客が選択したID(文字列)がほとんどありません。私のオブジェクトは属性IDを持っています。私はIDの配列で私のリストをフィルタリングしたいと思います。述語やラムダを使ってフィルタリングする方法はありますか?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

まず、私は、ルックアップを強化するためにSet<String>に配列selectedInvoicesを回すでしょう:

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

ええ!私は思い出の側で考えていた。 –

関連する問題