gpt4 book ai didi

java - RxJava 中的过滤器

转载 作者:行者123 更新时间:2023-12-02 03:33:00 24 4
gpt4 key购买 nike

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

我想使用 RxJava 根据组合 Transaction 属性过滤交易列表。组合会改变运行时,因此有人可以帮助我如何使用 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}

我认为这对于您的问题来说是一个很好的解决方案。

希望对您有所帮助。

最诚挚的问候。

关于java - RxJava 中的过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37815170/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com