我有一个带有接口的此类,并且该方法仅应提供索引10处的值,否则,如果不存在该值,则应返回null,我的方法总是从数组中提供我的Last Value,我键入了lambda表达式中的错误???
public interface Intrifun {
Integer apply(Integer p1, Integer p2, Integer p3);
}
public class IData {
private Integer[] ivalues;
public IData(Integer[] p)
{
ivalues = p;
}
public Integer dow(Intrifun itf)
{
Integer lastresult = null;
for (int i = 0; i < ivalues.length; i++)
{
if (ivalues[i] != null)
{
lastresult = itf.apply(ivalues[i], lastresult, i);
}
}
return lastresult;
}
}
这是我的测试方法:
public static void main (String[]args)
{ Integer [] tmp= {1,2,3,4,5,6,7,8,9,10,11,12,14,};
IData id= new IData(tmp);
System.out.println(id.dow( (p1,p2,p3)-> { if (p3==10){ return p1;
} else {
return null; }
}
));
}
答案 0 :(得分:0)
您的示例确实返回null,它不是您集合的最后一个值,并且对于您的代码而言是有效的 因为整数数组的最后一个索引不是10,因此返回空值。
一些评论:
答案 1 :(得分:0)
我认为您的解决方案很好,这是通过闭包捕获的另一种变体:
int resultValue = 0
id.dow((p1,p2,p3)-> {如果(p3 == 10){resultValue = p1;};返回resultValue;})
随意将任何答案标记为已回答。