【问题标题】:Java filter cannot return boolean [duplicate]Java过滤器不能返回布尔值[重复]
【发布时间】:2020-08-05 14:09:06
【问题描述】:

我正在尝试制作一个过滤器,用于过滤具有相同 2 个属性的不同对象。

我知道还有其他方法可以用 distinct 来做到这一点,但我想用过滤器内的过滤器来做到这一点。我有以下代码:

filteredOrderLines.stream().filter(o -> filteredOrderLines.stream().filter(o2 -> o.getOrderId().equals(o2.getOrderId()) && o.getProductId().equals(o2.getProductId()))).collect(Collectors.toList());

我明白了:

Bad return type in lambda expression: Stream<OrderLineDTO> cannot be converted to boolean

【问题讨论】:

  • filteredOrderLines.stream().filter(o -&gt; filteredOrderLines.stream() 您在需要过滤的流中传递了集合。
  • 消息在某种程度上不是自我解释Stream&lt;OrderLineDTO&gt; cannot be converted to boolean吗?

标签: java filter java-stream


【解决方案1】:

解决此任务的更正确方法是在 Order 类中覆盖 equalshashCode 方法(包括 orderIdproductId 字段)并在流上调用 distinct() 方法。流链将如下所示:

List<Order> uniqueOrders = filteredOrderLines.stream()
       .distinct()
       .collect(Collectors.toList()); 

事件更正确的解决方案 - 使用 HashSet 从您的初始列表中删除重复项。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-08
    • 1970-01-01
    • 2021-11-27
    • 2018-05-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多