簡體   English   中英

在RxJava中過濾

[英]Filter in RxJava

 class Transaction
 {
        int transactionId,transactionType,transactionStatus;
        double transactionAmount;
        Date transactionDate;    
}

我想使用RxJava基於交易屬性組合過濾交易列表。 組合會更改運行時,因此有人可以幫助我如何對同一對象使用filter()運算符

前一段時間,我不得不做你想做的同樣的事情。 我創建了一個簡單的解決方案來處理多重過濾,如下所示:

public class ExampleUnitTest {
    @Test
    public void testSample() throws Exception {
        TransactionDatabase transactionDatabase = new TransactionDatabase();

        transactionDatabase.insert(new Transaction(1, 50.00, new Date()));
        transactionDatabase.insert(new Transaction(2, 20.00, new Date()));
        transactionDatabase.insert(new Transaction(3, 110.00, new Date()));
        transactionDatabase.insert(new Transaction(4, 250.00, new Date()));
        transactionDatabase.insert(new Transaction(5, 5.00, new Date()));
        transactionDatabase.insert(new Transaction(5, 73.00, new Date()));

        List<Func1<Transaction, Boolean>> filters = new ArrayList<>();

        filters.add(transaction -> transaction.transactionAmount > 20);
        filters.add(transaction -> transaction.transactionAmount < 100);

        transactionDatabase.getTransactions(filters)
                .subscribe(System.out::println);
    }

    private class Transaction {
        int transactionId;
        double transactionAmount;
        Date transactionDate;

        public Transaction(int transactionId, double transactionAmount, Date transactionDate) {
            this.transactionId = transactionId;
            this.transactionAmount = transactionAmount;
            this.transactionDate = transactionDate;
        }

        @Override
        public String toString() {
            return "Transaction{" +
                    "transactionId=" + transactionId +
                    ", transactionAmount=" + transactionAmount +
                    ", transactionDate=" + transactionDate +
                    '}';
        }
    }

    class TransactionDatabase {
        List<Transaction> transactions = new ArrayList<>();

        public void insert(Transaction transaction) {
            transactions.add(transaction);
        }

        public Observable<Transaction> getTransactions(List<Func1<Transaction, Boolean>> filters) {
            Observable<Transaction> observable = Observable.from(transactions);

            for (Func1<Transaction, Boolean> filter : filters) {
                observable = observable.filter(filter);
            }

            return observable;
        }
    }
}

它將打印此:

Transaction{transactionId=1, transactionAmount=50.0, transactionDate=Tue Jun 14 16:21:24 BRT 2016}
Transaction{transactionId=5, transactionAmount=73.0, transactionDate=Tue Jun 14 16:21:24 BRT 2016}

我認為這是解決您問題的好方法。

希望對您有所幫助。

最好的祝福。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM