java8 :: 用法 (JDK8 双冒号用法)
【摘要】
JDK8中有双冒号的用法,就是把方法当做参数传到stream内部,使stream的每个元素都传入到该方法里面执行一下。
代码其实很简单:
以前的代码一般是如此的:
public class AcceptMethod { public static void printValur(String str){ S...
JDK8中有双冒号的用法,就是把方法当做参数传到stream内部,使stream的每个元素都传入到该方法里面执行一下。
代码其实很简单:
以前的代码一般是如此的:
-
public class AcceptMethod {
-
-
public static void printValur(String str){
-
System.out.println("print value : "+str);
-
}
-
-
public static void main(String[] args) {
-
List<String> al = Arrays.asList("a","b","c","d");
-
for (String a: al) {
-
AcceptMethod.printValur(a);
-
}
-
//下面的for each循环和上面的循环是等价的
-
al.forEach(x->{
-
AcceptMethod.printValur(x);
-
});
-
}
-
}
-
public class MyTest {
-
public static void printValur(String str){
-
System.out.println("print value : "+str);
-
}
-
-
public static void main(String[] args) {
-
List<String> al = Arrays.asList("a", "b", "c", "d");
-
al.forEach(AcceptMethod::printValur);
-
//下面的方法和上面等价的
-
Consumer<String> methodParam = AcceptMethod::printValur; //方法参数
-
al.forEach(x -> methodParam.accept(x));//方法执行accept
-
}
-
}
-
-
上面的所有方法执行玩的结果都是如下:
-
1
-
2
-
3
-
4
-
-
print value : a
-
print value : b
-
print value : c
-
print value : d
-
-
在JDK8中,接口Iterable 8中默认实现了forEach方法,调用了 JDK8中增加的接口Consumer内的accept方法,执行传入的方法参数。
-
-
JDK源码如下:
-
1
-
2
-
3
-
4
-
5
-
6
-
7
-
8
-
9
-
10
-
11
-
12
-
13
-
14
-
15
-
16
-
17
-
18
-
19
-
20
-
21
-
22
-
23
-
24
-
25
-
-
/**
-
* Performs the given action for each element of the {@code Iterable}
-
* until all elements have been processed or the action throws an
-
* exception. Unless otherwise specified by the implementing class,
-
* actions are performed in the order of iteration (if an iteration order
-
* is specified). Exceptions thrown by the action are relayed to the
-
* caller.
-
*
-
* @implSpec
-
* <p>The default implementation behaves as if:
-
* <pre>{@code
-
* for (T t : this)
-
* action.accept(t);
-
* }</pre>
-
*
-
* @param action The action to be performed for each element
-
* @throws NullPointerException if the specified action is null
-
* @since 1.8
-
*/
-
default void forEach(Consumer<? super T> action) {
-
Objects.requireNonNull(action);
-
for (T t : this) {
-
action.accept(t);
-
}
-
}
JDK8改动的,在接口里面可以有默认实现,就是在接口前加上default,实现这个接口的函数对于默认实现的方法可以不用再实现了。类似的还有static方法。现在这种接口除了上面提到的,还有BiConsumer,BiFunction,BinaryOperation等,在java.util.function包下的接口,大多数都有,后缀为Supplier的接口没有和别的少数接口。
文章来源: aaaedu.blog.csdn.net,作者:tea_year,版权归原作者所有,如需转载,请联系作者。
原文链接:aaaedu.blog.csdn.net/article/details/104526433
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)