【问题标题】:Two separate stream operations merged into one [duplicate]两个单独的流操作合并为一个[重复]
【发布时间】:2021-03-11 15:34:14
【问题描述】:

是否有可能(甚至可行)将这两个流操作合并到一个单遍解决方案中?

int max = locations.stream()
        .map(location -> location.getAvailableScooters().size())
        .max(Comparator.naturalOrder())
        .orElse(-1);

return locations.stream()
        .filter(location -> location.getAvailableScooters().size() == max)
        .collect(Collectors.toSet());

【问题讨论】:

  • 由于max 接受比较器,您可以考虑创建一个Comparator<Location> 来查找max,因为您说您正在寻找所有符合条件和@987654325 的元素@ 和 maxBy 在这里可能会有所帮助。

标签: java merge java-stream max


【解决方案1】:

我看到合并的唯一方法是这样的:

return locations.stream()
        .filter(location -> location.getAvailableScooters().size() == 
                 locations.stream()
                .map(location -> location.getAvailableScooters().size())
                .max(Comparator.naturalOrder())
                .orElse(-1) )
        .collect(Collectors.toSet());

这是一个更糟糕的解决方案
ma​​xcollect 都是终端操作,这使得合并不可能

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-06
    • 2019-07-25
    • 2014-06-25
    • 2014-06-08
    • 2021-01-24
    • 2019-02-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多