使用具有自定义功能接口的流

时间:2015-05-23 12:11:27

标签: java lambda java-8 java-stream functional-interface

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

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

我找不到将流与自定义功能接口结合使用的方法。你会如何模仿这种行为?我觉得在上面的场景中创建一个静态的“isAdult”方法并不是一个非常干净的解决方案,也没有用这样的方法创建一个“PersonChecker”对象。

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

谢谢

1 个答案:

答案 0 :(得分:4)

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

如果我想重用过滤器逻辑,例如有一种方法&#34; isAdult&#34;在人?

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

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

我无法创建一个接受带有年龄的附加int参数的过滤器来创建一个参数&#34; isOlderThan&#34;逻辑。

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

我不知道自定义功能界面与您的问题有什么关系。谓词是这里唯一需要的功能接口,lambdas和方法引用是创建谓词实例的极其简单的方法。