我这样做了:
public class LambdaConflict
{
public static void main(String args[]){
//*
System.out.println(LambdaConflict.get(
(str) -> "Hello World!! By ME?"
));
/*/
System.out.println(LambdaConflict.get(new Intf<String> (){
@Override public String get1(String str){
return "Hello World!! By get1 " + str;
}
}));
/*****/
}
public static String get(Intf<String> i, boolean b){
return i.get1("from 1");
}
}
interface Intf<T>
{
public T get1(T arg1);
public T get2(T arg1);
}
Run Code Online (Sandbox Code Playgroud)
并获得此异常:
不兼容的类型:Intf不是函数接口在接口Intf中找到的多个非重写抽象方法注意:某些消息已被简化; 使用-Xdiags重新编译:详细以获得完整输出1错误
是否有任何条件我不能使用lambda来替换匿名类?
我有一套和一个方法:
private static Set<String> set = ...;
public static String method(){
final String returnVal[] = new String[1];
set.forEach((String str) -> {
returnVal[0] += str;
//if something: goto mark
});
//mark
return returnVal[0];
}
Run Code Online (Sandbox Code Playgroud)
我可以在lambda中终止forEach(使用或不使用例外)吗?我应该使用匿名课吗?
我能做到这一点:
set.forEach((String str) -> {
if(someConditions()){
returnVal[0] += str;
}
});
Run Code Online (Sandbox Code Playgroud)
但是浪费时间.
使用stream.reduce实现
return set.parallelStream().reduce((output, next) -> {
return someConditions() ? next : output;
}).get(); //should avoid empty set before
Run Code Online (Sandbox Code Playgroud)
我正在寻找最快的解决方案,因此如果它们足够快,那么每个循环的异常和"真实"是可以接受的.