比较数组列表中对象的值

问题描述 投票:0回答:1

有一个数组列表,如下所示

List<Accounts> accList = [{"acCat":"SBSDF","acDesc":"SBA","tranID":"D1P902368"},{"acCat":"RCCIT","acDesc":"ODA","tranID":"D1P902368"},{"acCat":"SBSFA","acDesc":"SBA","tranID":"D1P902360")]

情况就像如果我的列表将 acDesc 作为 ODA 和 SBA,则应该进行比较 ODA tranID 与 SBA tranID 是否匹配,如果两者相等则应返回布尔值 true。

如果如何以简洁的方式完成此操作,我不想进行多次检查。

java optimization arraylist stream compare
1个回答
0
投票

您可以使用 Java 8 流来实现这一点。

    public boolean isTransactionIdSameForODAandSBA(List<Accounts> accList) {
    String odaTranID = accList.stream()
                              .filter(account -> "ODA".equals(account.getAcDesc()))
                              .findAny()
                              .map(Accounts::getTranID)
                              .orElse(null);
    String sbaTranID = accList.stream()
                              .filter(account -> "SBA".equals(account.getAcDesc()))
                              .findAny()
                              .map(Accounts::getTranID)
                              .orElse(null);
    return odaTranID != null && odaTranID.equals(sbaTranID);
}

一旦找到有效匹配,该函数将立即返回,而不是迭代整个数组两次。

此外,请确保您的 Accounts 类已定义相应的 getter,否则您将不得不稍微调整代码。

© www.soinside.com 2019 - 2024. All rights reserved.