1

我刚刚开始在这个 Oracle 网站上查看流。看到下面的代码,我立即想到的一个问题是:如果我想重用过滤器逻辑,例如在 Person 中有一个方法“isAdult”怎么办?

这在流中作为方法引用不起作用,因为它不接受参数 Person。类似地,我将无法创建一个过滤器,该过滤器接受一个带有年龄的附加 int 参数来创建一个可参数化的“isOlderThan”逻辑。

我找不到将流与自定义功能接口结合使用的方法。你将如何模拟这种行为?在我看来,在上述场景中创建静态“isAdult”方法不是一个非常干净的解决方案,使用此类方法创建“PersonChecker”对象也不是。

List<Person> list = roster.parallelStream().filter((p) -> p.getAge() > 18).collect(Collectors.toList()); 

谢谢

4

1 回答 1

3
List<Person> list = roster.parallelStream().filter((p) -> p.getAge() > 18).collect(Collectors.toList());

如果我想重用过滤器逻辑,例如在 Person 中有一个方法“isAdult”怎么办?

List<Person> list = roster.parallelStream().filter(Person::isAdult).collect(Collectors.toList());

或者

List<Person> list = roster.parallelStream().filter(p -> p.isAdult()).collect(Collectors.toList());

我将无法创建一个过滤器,该过滤器接受一个带有年龄的附加 int 参数来创建一个可参数化的“isOlderThan”逻辑。

List<Person> list = roster.parallelStream().filter(p -> p.isOlderThan(18)).collect(Collectors.toList());

我看不出自定义功能接口与您的问题有什么关系。Predicate 是您在这里需要的唯一功能接口,而 lambda 和方法引用是创建 Predicate 实例的极其简单的方法。

于 2015-05-23T12:16:24.797 回答