【发布时间】:2021-09-03 23:47:24
【问题描述】:
我是函数式编程的新手。 我想了解我在这里缺少哪个概念。
Stream<Employee> stream1 = getEmployeeListOne().stream();
Stream<Employee> stream2 = getEmployeeListTwo().stream();
Predicate<Employee>predicate=x->x.getFirstName().startsWith("L");
//Below line is compile time error
List<Employee>list=stream1.filter((x->x.getFirstName().startsWith("L")).or(x->x.getLastName().startsWith("L"))).collect(Collectors.toList());
//Below line works well
//List<Employee>list2=stream1.filter(predicate.or(x->x.getLastName().startsWith("L"))).collect(Collectors.toList());
它只是说这里不需要 lambda 表达式
【问题讨论】:
-
到底是什么问题? --- 在给出的代码中,
stream1.filter(...)被调用了两次。Streams 是一次性资源,所以一旦被消费一次,就“空”了。 -
@Turing85 即使我评论最后一行,也是编译错误。我没有在这里发表评论。谢谢我已经更新了问题。
-
请edit问题并添加编译错误。
-
因为在另一个示例中,我们使用了
Predicate,由 lambda 初始化。在第一个示例中,我们使用“原始”lambda。它还不是Predicate,只是一个 lambda。 -
@Bergi 当然,我们可以转换 lambda:
((<Type-we-need>) <lambda-expression>)。
标签: java-8 functional-programming