当前位置: 首页 > 知识库问答 >
问题:

Java 8与流中的过滤器相对[重复]

燕刚毅
2023-03-14

您好,我如何在Java8(我知道它已经在Java11)中做相反的不过滤这一点

filter(date -> date.isEqual(today) && repository.isDateExist(date))

我可以这样写

filter(date -> !date.isEqual(today) || !repository.isDateExist(date))

但很难读懂

共有1个答案

章绪
2023-03-14

有这样的情况

filter(date -> date.isEqual(today) && repository.isDateExist(date))

术语repository.isdateExist(date)只有在date被证明等于today时才计算,因此其结果与repository.isdateExist(today)相同,在整个流操作期间不会更改。因此,没有理由反复检查。

所以更好的变体是

final boolean todayExist = repository.isDateExist(today);
…
filter(todayExist? today::isEqual: date -> false)

否定将是

final boolean todayExist = repository.isDateExist(today);
…
filter(todayExist? date -> true: date -> !date.isEqual(today))

但是,在TodayExistTrue时,您可能会考虑完全不应用筛选器。

 类似资料:
  • 有时您希望筛选具有多个条件的: 也可以使用复杂条件和单个: 第一种方法在可读性方面胜出,但在性能方面,什么更好呢?

  • 假设我有一张房间清单 每个房间都有一份人员名单。 使用java8 streams,我想迭代房间列表,获取所有人员,在每个节点上执行一些方法(doSomething()),并获取所有过滤对象的列表。 这是使用java 8的最佳实践吗?

  • 有可能在流中过滤更多次吗?例如,如果我有一个带有ID的列表,我想流一个HashMap,并将HashMap的键映射到列表中的键,以及它们在哪里匹配,我想从HashMap中获取对象,并再次过滤它,例如该对象中的int字段大于3,并在最后求和。例如,如果它发现10种情况,其中列表的键和HashMap的键相等,它过滤这10种情况,并发现3种情况,例如int字段大于3,它最终返回这些的总和。 到目前为止,这

  • 我想从CSV文件中删除包含错误日期的行。在这个过程中,CSV文件应该保留头行。所有这些我都希望使用Java8 Streams来执行。 一开始我想到了这个:

  • 如何使用java8流和过滤器过滤嵌套循环? 假设我有一个汽车列表(

  • 我所拥有的 预期产出 实际产量 这只是一个例子。在我的真实代码中,我正在对我的全局状态(useContext, useReduer)执行删除操作。 是一个ID数组。