2016-05-16 5 views
0

Ich habe eine beobachtbare Liste, ich habe versucht, es durch verschiedene Prädikate zu filtern.Java ObservableList Filterung mit Prädikat mit Strings

Ich habe Objekte verschachtelt, auf denen ich filtere.

Hier ist der erste 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; 
} 

Ich habe Java 8 Stream API verwendet Filterung zu tun, ist es nicht für String funktioniert, aber es funktioniert perfekt für die Balance und andere Arten.

Hier ist, wie ich meine Liste filtere:

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) 
} 

Also, was ist das Problem mit meinem Code?

+0

a) Ihr Code wird nicht kompiliert. b) Was genau ist das Problem? – shmosel

+0

Das Problem ist der Filter funktioniert nicht für Strings, aber es funktioniert, wenn ich mit Zahlen vergleiche. Ich habe meinen Code aktualisiert –

+0

Was bedeutet "nicht funktioniert"? Wächst dein Computer Beine und tritt aus der Tür? – shmosel

Antwort

1

Ich denke, Sie haben nur den Code in dieser Frage von Hand eingegeben, deshalb gibt es Kompilierungsfehler. Ich habe deine Klassen überarbeitet (mit einigen Annahmen).

Konto Klasse

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; 
    } 
} 

Transaktionsklasse

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; 
    } 
} 

ich diese Klasse erstellt und als 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()); 
    } 
} 

Hoffentlich genannt, das hilft !!