And*_*ens 5 java lambda functional-programming java-8 java-stream
是不是说Stream在Java 8中,你只能使用带有单个参数的方法引用(如果不允许用方法调用包装方法引用)?
我假设是因为你在任何时候在流中处理一个项目.
因此:
Something::new (必须引用单个arg构造函数)this::doSomething (必须采取一个arg)Something::doSomething
(必须采取一个arg)在使用时... Stream.这个规则总是正确的吗?
不,这不对.一些Stream方法采用具有多个参数的方法的功能接口.
例如,Stream's sorted(Stream<T> Comparator<? super T> comparator)方法,取a Comparator,其方法有两个参数.
以下是使用方法引用的示例String::compareTo- 具有两个参数的方法:
System.out.println(Stream.of("a","d","c").sorted(String::compareTo).collect(Collectors.toList()));
Run Code Online (Sandbox Code Playgroud)
Stream的Optional<T> max(Comparator<? super T> comparator)方法是另一个类似的例子.
方法参考有四种类型:
引用静态方法的方法,即
Class::staticMethod -> (args) -> Class.staticMethod(args)
引用特定类型对象的实例方法的方法。即
ObjectType::instanceMethod -> (obj, args) -> obj.instanceMethod(args)
引用现有对象的实例方法的方法,即
obj::instanceMethod -> (args) -> obj.instanceMethod(args)
对构造函数的方法引用,即
ClassName::new -> (args) -> new ClassName(args)
正如你可以用第二个例子中看到,给定的方法可以采取两个参数,但仍然可以转换为方法的参考,这是真实的调用的情况下sorted,min,max等流的..。
归功于Java 8 Method Reference:如何在上面的示例中使用它。
| 归档时间: |
|
| 查看次数: |
133 次 |
| 最近记录: |