Java ObservableList 使用字符串谓词进行过滤

标签 java list filter java-8 java-stream

我有一个可观察列表,我尝试通过不同的谓词来过滤它。

我有要进行过滤的嵌套对象。

这是第一个 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;
}

我使用Java 8流API进行过滤,它不适用于String,但它非常适合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 )
}

那么,我的代码有什么问题吗?

最佳答案

我认为您只是手写了这个问题中的代码,这就是出现编译错误的原因。我重构了你的类(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;
    }
}

交易类

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

希望这有帮助!!

关于Java ObservableList 使用字符串谓词进行过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37263724/

相关文章:

java - 来自 Eclipse 库项目的 Xamarin 绑定(bind)服务 -> InvalidCastException

python - 将 glob.iglob() 结果分配给列表

delphi - 对 TBitmap 的更改不会出现在 Delphi 6 DirectShow 过滤器的渲染图像中,并会生成大量软页面错误

使用 Dii 方法的 Java Web 服务

java - Android 客户端和 JSF 服务器通信

python - 在 Python 中将浮点列表转换为字符串

python - python 中包含整数和字符串的列表

python - 按键值过滤字典列表 - 将答案作为字典列表返回

php - 同时使用 PDO 准备好的语句和 filter_var?

java - FindBugs:INT_VACUOUS_BIT_OPERATION