[英]Java ObservableList filtering with predicate with Strings
I have an observable list, I tried to filter it by different predicates. 我有一个可观察的列表,我试图用不同的谓词过滤它。
I have nested objects on which I do filtering. 我嵌套了要过滤的对象。
Here is the first pojo 这是第一个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;
}
I have used Java 8 stream API to do filtering, it doesn't work for String, but it works perfectly for balance and other types. 我已经使用Java 8流API进行了过滤,它不适用于String,但对于balance和其他类型则非常适用。
Here is how i do filter my list: 这是我如何过滤列表的方法:
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 )
}
So, what's the issue with my code ? 那么,我的代码有什么问题?
I think you just hand-typed the code in this question, thats why there are compilation errors. 我认为您只是在此问题中手动键入了代码,这就是为什么存在编译错误。 I refactored your classes (with some assumptions).
我重构了您的课程(有一些假设)。
Account class 帐户类别
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;
}
}
Transaction class 交易类别
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;
}
}
I created this class and named as TransactionsManager 我创建了此类并命名为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());
}
}
Hopefully, this helps!! 希望这会有所帮助!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.