java⾥_java中的::是什么意思?
这⾥是java8 的新特性的应⽤。
forEach是属于java集合的⼀个⽅法,准确来说,集合在java8中拥有⼀个stream⽅法,可以得到⼀个流对象,这个对象拥有很多⽅法,这些⽅法可以很⽅便的对集合进⾏例如排序,分组,计数,遍历,转换等操作,⽽遍历是⽐较常见的⼀种,forEach就是⽤来做这个的,这⾥的forEach就是stream的forEach。qq安全中心网页
java此时还有另外⼀个特性叫做lambda表达式和函数式接⼝,仅仅有⼀个未实现⽅法的接⼝,可以直接写作(参数列表) -> {⽅法体}这种形式。
例如:
@FunctionalInterface
public interface FuncA {
void doSomeThing(String str);
}
那么上⾯这种接⼝就可以直接写作:
FuncA funcA = (str) -> {
System.out.println("hello");
西山兰若试茶歌
重庆历史};
类似的还有Swing或者javaFx的监听器:一个人的城市
btn.addActionListener(e->{
// do something
});
鸟的天堂教学设计这样就省去了之前需要专为他编写⼀个实现类或者匿名内部类的代码,直接对接⼝进⾏实现。
⽽在这之上,如果⼀个⽅法的调⽤中,这个⽅法给接⼝提供的参数和他接收的返回,和你现有某个实现完全⼀致,就可以进⼀步进⾏简化,称为⽅法引⽤。
怎么进外网
forEach⽅法提供⼀个某种类型的Object(具体是什么类型是要看Stream类的泛型参数的,不过⼀般就是这个集合提供的那种类型),⽽System.out.println可以接受⼀个Object,因此,forEach提供的参数和System.out.println的参数类型是⼀致的,可以进⾏这种简写。摩西的故事
具体来说就是:原本应该写为:
.forEach(element -> {
读大学System.out.println(element)
})
但是System.out.println的参数和传递的参数element 的类型完全匹配,所以这样的时候就可以简化为:
.forEach(System.out::println)
即forEach将会使⽤System.out对象的println⽅法进⾏接下来的操作。