2016-06-14 3 views
0
class Transaction 
{ 
     int transactionId,transactionType,transactionStatus; 
     double transactionAmount; 
     Date transactionDate;  
} 

Я хочу, чтобы отфильтровать список транзакций на основе комбинации Transaction собственности с использованием RxJava. Комбинация изменяет время выполнения, поэтому кто-то может мне помочь, как использовать filter() оператор для того жефильтр в RxJava

+1

Непонятно, как именно вы хотите отфильтровать эти предметы или то, что вы пробовали (и почему это не сработало). Пожалуйста, объясните более подробно (возможно, на примере), что вы ожидаете, и что вы пробовали. –

+0

@tanis Я попытался использовать оператор фильтра, но я смог отфильтровать этот список, используя одно свойство, но в моем случае пользователь может выбрать несколько фильтров, таких как диапазон транзакций, с транзакцией и так далее, и я использую RxJava в первый раз – shaikhmanzoor

+0

Вы можете позвонить ' filter() 'столько раз, сколько вы хотите применить несколько фильтров, или вы можете создать один более сложный фильтр, который будет применять несколько фильтров более индивидуально. –

ответ

1

Некоторое время назад я должен был сделать то же самое, что вы хотите. Я создаю простое решение для обработки мульти фильтрации, которая выглядит следующим образом:

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} 

Я думаю, что это довольно решение для вашей проблемы.

Надеюсь, что это поможет.

С уважением.