Lambda表达无法正常工作

时间:2018-07-31 16:32:43

标签: arrays lambda

我有一个带有接口的此类,并且该方法仅应提供索引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; }      
            } 
         ));    
       } 

2 个答案:

答案 0 :(得分:0)

您的示例确实返回null,它不是您集合的最后一个值,并且对于您的代码而言是有效的 因为整数数组的最后一个索引不是10,因此返回空值。

一些评论:

  • 我已经使用Java 10在jshell中对其进行了测试
  • 如果格式化,那会很好 您的代码更好,以便其他用户可以更有效地帮助您
  • 鉴于您想要的原因,为什么您的示例过于复杂 实现,您打算学习lambda吗?
  • 如果您的目标是 得到第10个元素,那么您就忘了以后的lambda调用 返回null,结果覆盖了lastResult中的第10个元素。

答案 1 :(得分:0)

我认为您的解决方案很好,这是通过闭包捕获的另一种变体:

int resultValue = 0

id.dow((p1,p2,p3)-> {如果(p3 == 10){resultValue = p1;};返回resultValue;})

随意将任何答案标记为已回答。