【问题标题】:Stream filter using Predicate to fetch latest record使用 Predicate 获取最新记录的流过滤器
【发布时间】:2020-05-25 11:17:07
【问题描述】:

我有一个 boolean 类型的方法,它返回 Predicate 类型 Incident 的数据流,我只想过滤掉最新的事件。

【问题讨论】:

  • 您的意思是您需要找到您的Stream 的最后一个通过该过滤器的元素吗? forloebsList 吗?
  • 为什么代码被删除了?
  • 因为它不是示例代码

标签: java lambda java-stream predicate


【解决方案1】:

您必须检查流中的所有元素。您可以将所有过滤的元素收集到LinkedList 并获取最后一个。

forloebs.stream()
.filter(predicate)
.collect(Collectors.toCollection(LinkedList::new)).peekLast();

如果此列表为空,peekLast 将返回 null

【讨论】:

  • null 在这种情况下可以用Optional 处理
【解决方案2】:

您可以使用max 函数获取与您的completeincident 条件匹配的最新事件。

Optional<Incident> latestIncident = forloebs.stream()
 .filter(completeincident)
 .max(Comparator.comparing(x -> x.getDateIncident()));

比较器将保留基于getDateIncident 的最新元素。

如果它们都不符合过滤条件,它将返回Optional.Empty

【讨论】:

    猜你喜欢
    • 2013-03-18
    • 2023-02-02
    • 2018-03-03
    • 2013-12-10
    • 1970-01-01
    • 2013-08-25
    • 2017-09-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多