2016-05-16 4 views
0

私は観測可能なリストを持っていますが、私は別の述語でそれをフィルタリングしようとしました。Java ObservableListで述語を文字列でフィルタリングする

フィルタリングするオブジェクトがネストされています。ここで

私はフィルタリングを行うためにJava 8ストリームAPIを使用していた最初のPOJO

public Class Transaction { 
    private String name; 
    private Account account ; 
    private BigDecimal ammout ; 
} 


public class Account{ 
    private String nameBank; 
    private String number; 
    private BigDecimal balance; 
} 

あり、それは文字列では動作しませんが、それはバランスおよび他のタイプのために完璧に動作します。ここで

は、私は私のリストをフィルタリング行う方法です:だから

public void findByBankName(String bankName) { 
ObservableList<Transaction> transactionList = FXCollections 
      .observableArrayList(); 
return transactionList.stream() 
       .filter(t -> 
         t.getAccount().getnameBank().Contains(bankName)) 
       .collect(Collectors.toList()); 

// Instead it work when i do 
// .filter(t -> t.getAccount().getBalance().doubleValue() > 0) 
} 

、私のコードの問題は何でしょうか。

+0

a)コードはコンパイルされません。 b)問題はどういったものですか? – shmosel

+0

問題は、文字列に対して機能しないフィルターですが、数値と比較すると機能します。私は自分のコードを更新しました –

+0

「うまくいかない」とはどういう意味ですか?あなたのコンピュータは足を伸ばしてドアから出ていますか? – shmosel

答えて

1

私はこの質問でコードを手入力したと思うので、コンパイルエラーがあるのです。私はあなたのクラスを(いくつかの前提で)リファクタリングしました。

Accountクラス

public class Account{ 
    private String nameBank; 
    private String number; 
    private BigDecimal balance; 

    public String getNameBank() { 
     return nameBank; 
    } 

    public void setNameBank(String nameBank) { 
     this.nameBank = nameBank; 
    } 

    public String getNumber() { 
     return number; 
    } 

    public void setNumber(String number) { 
     this.number = number; 
    } 

    public BigDecimal getBalance() { 
     return balance; 
    } 

    public void setBalance(BigDecimal balance) { 
     this.balance = balance; 
    } 
} 

トランザクション・クラスは

public class Transaction { 
    private String name; 
    private Account account ; 
    private BigDecimal ammout ; 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public Account getAccount() { 
     return account; 
    } 

    public void setAccount(Account account) { 
     this.account = account; 
    } 

    public BigDecimal getAmmout() { 
     return ammout; 
    } 

    public void setAmmout(BigDecimal ammout) { 
     this.ammout = ammout; 
    } 
} 

私はこのクラスを作成し、うまくいけば、TransactionsManager

public class TransactionsManager { 
    private final List<Transaction> transactionsList; 

    public TransactionsManager(List<Transaction> transactionsList) { 
     this.transactionsList = Collections.unmodifiableList(transactionsList); 
    } 

    public List<Transaction> findByBankName(String bankName) { 
     return transactionsList.stream() 
       .filter(t -> t.getAccount().getNameBank().contains(bankName)) 
       .collect(Collectors.toList()); 
    } 
} 

として名付け、このことができます!

関連する問題