java8中:用法示例(JDK8双冒号用法)

  

JDK8中有双冒号的用法,就是把方法当做参数传到流内部,使流的每个元素都传入到该方法里面执行一下。

  

<强>代码其实很简单:

  

以前的代码一般是如此的:

        公开课AcceptMethod {      公共静态孔隙printValur (String str) {   system . out。println(打印值:+ str);   }      公共静态void main (String [] args) {   列表al=arrays . aslist (“a”、“b”、“c”,“d”);   (字符串:al) {   AcceptMethod.printValur(一个);   }//下面的每个循环和上面的循环是等价的   al.forEach (x→{   AcceptMethod.printValur (x);   });   }   }      

现在JDK双冒号是:

        公开课MyTest {   公共静态孔隙printValur (String str) {   system . out。println(打印值:+ str);   }      公共静态void main (String [] args) {   艾尔=数组列表。asList (“a”、“b”、“c”,“d”);   al.forEach (AcceptMethod:: printValur);//下面的方法和上面等价的   消费者methodParam=AcceptMethod:: printValur;//方法参数   al.forEach (x→methodParam.accept (x));//方法执行接受   }   }      

上面的所有方法执行玩的结果都是如下:

  
  

打印值:一个
  打印值:b
  打印值:c
  打印值:d
  

     

在JDK8中,接口Iterable 8中默认实现了forEach方法,调用了JDK8中增加的接口内消费者的接受方法,执行传入的方法参数。

  

JDK源码如下:

     /* *   *执行给定的操作的每个元素{@code Iterable}   *,直到所有的元素都已经被处理或操作抛出   *例外。除非另有指定的实现类,   *操作执行的顺序迭代的迭代(如果订单   *指定)。抛出的异常动作传递到   *调用者。   *   * @implSpec   * & lt; p>如果默认实现的行为:   * & lt; pre> {@code   * (T T:这个)   * action.accept (t);   *}& lt;/pre>   *   * @param行动为每个元素执行的动作   * @throws NullPointerException如果指定的行动是零   * @since 1.8   */默认空forEach (Consumer<& # 63;超级T>动作){   Objects.requireNonNull(行动);   (T T:这){   action.accept (t);   }   }      

另外补充一下,JDK8改动的,在接口里面可以有默认实现,就是在接口前加上违约,实现这个接口的函数对于默认实现的方法可以不用再实现了。类似的还有静态方法。现在这种接口除了上面提到的,还有BiConsumer, BiFunction, BinaryOperation等,在java.util.function包下的接口,大多数都有,后缀为供应商的接口没有和别的少数接口。

  

  

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。

java8中:用法示例(JDK8双冒号用法)