我想隐式地将我自己的接口实现转换为Java8函数。
我的代码:
import java.util.stream.Stream;
@FunctionalInterface
interface StringChanger {
String change(String o);
}
public class A {
public static void main(String[] args) {
Stream.of("hello", "world")
.map(new StringChanger() {
@Override
public String change(String o) {
return o.trim();
}
})
.forEach(System.out::println);
}
}
为什么演员不起作用?
我得到了这个例外:
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
The method map(Function<? super String,? extends R>) in the type Stream<String> is not applicable for the arguments (Trimmer)
at A.main(A.java:13)
答案 0 :(得分:0)
好吧,map
方法并不期望实现StringChanger
。它期望实现Function
。
您可以做的是创建StringChanger
界面的实现,并将实施的方法参考传递给map
:
StringChanger sc = new StringChanger() {
@Override
public String change(String o) {
return o.trim();
}
};
Stream.of("hello", "world")
.map(sc::change)
.forEach(System.out::println);
编辑:
为了将一个功能接口的实现分配给不同的功能接口引用,您可以为源功能接口的方法分配方法引用:
MyConsumer i3 = i::accept;
IntConsumer i4 = i2::doSomething;