【问题标题】:Stream filter add condition流过滤器添加条件
【发布时间】:2021-12-01 07:19:34
【问题描述】:

如何使用 Lamdas 仅在 result.getExtendedAddress() 存在时添加条件?

原始状态:

.filter(result -> StringUtils.isNotBlank(title) && StringUtils.contains(result.getTitle().toLowerCase(), title.toLowerCase()))

新条件:

.filter(result -> StringUtils.isNotBlank(title) &&
                        (StringUtils.contains(result.getTitle().toLowerCase(), title.toLowerCase()) ||
                                ((result.getExtendedAddress()!= null) && (StringUtils.contains(result.getExtendedAddress().toLowerCase(), title.toLowerCase()))))

这个新条件似乎过于复杂,我想知道是否有更好的方法来做到这一点?

【问题讨论】:

  • 没有给出这个答案,因为我不知道StringUtils 足以确定它如何处理null 输入,但我认为Optional.ofNullable(result.getExtendedAddress()).map(String::toLowerCase).orElse(null) 应该可以工作。
  • 假设您使用的是 Apache Common 的 StringUtils,您还可以使用 StringUtils.containsIgnoreCase() 来摆脱空检查:filter(StringUtils.containsIgnoreCase(result.getTitle(), title) || StringUtils.containsIgnoreCase(result.getExtendedAddress(), title))
  • 谢谢@Thomas。是的,我正在使用 org.apache.commons.lang3.StringUtils

标签: java stream


【解决方案1】:

感谢@Thomas,我能够使用StringUtils.containsIgnoreCase() 快速找到解决方案。该方法描述为here

解决方案:

.filter(result -> StringUtils.isNotBlank(title) &&
                        (StringUtils.containsIgnoreCase(result.getTitle(), title) ||
                                StringUtils.containsIgnoreCase(result.getAdditionalAddress(), title)))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-31
    • 1970-01-01
    • 2017-05-06
    • 2021-10-30
    • 2018-04-15
    • 1970-01-01
    • 2021-08-26
    • 2011-02-04
    相关资源
    最近更新 更多