Некоторое время назад я должен был сделать то же самое, что вы хотите. Я создаю простое решение для обработки мульти фильтрации, которая выглядит следующим образом:
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}
Я думаю, что это довольно решение для вашей проблемы.
Надеюсь, что это поможет.
С уважением.
Непонятно, как именно вы хотите отфильтровать эти предметы или то, что вы пробовали (и почему это не сработало). Пожалуйста, объясните более подробно (возможно, на примере), что вы ожидаете, и что вы пробовали. –
@tanis Я попытался использовать оператор фильтра, но я смог отфильтровать этот список, используя одно свойство, но в моем случае пользователь может выбрать несколько фильтров, таких как диапазон транзакций, с транзакцией и так далее, и я использую RxJava в первый раз – shaikhmanzoor
Вы можете позвонить ' filter() 'столько раз, сколько вы хотите применить несколько фильтров, или вы можете создать один более сложный фильтр, который будет применять несколько фильтров более индивидуально. –