⛳ java8 :: 用法 (JDK8 双冒号用法)
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);});}
}
现在JDK双冒号是:
public class MyTest {public static void printValur(String str){System.out.println("print value : "+str);}public static void main(String[] args) {/**Arrays.asList()方法将字符串"a"、"b"、"c"和"d"添加到该列表中。这个列表是一个不可变的列表,意味着您不能添加、删除或修改其中的元素。这是因为Arrays.asList()方法返回的是一个固定大小的列表,它基于传递给它的数组创建。如果您尝试对这个列表进行结构性修改(例如添加或删除元素),将会抛出UnsupportedOperationException异常。但是,您仍然可以使用索引访问和修改列表中的元素。*/List<String> al = Arrays.asList("a", "b", "c", "d");/**使用了方法引用AcceptMethod::printValur作为Consumer接口的实现。AcceptMethod是一个自定义的类,其中包含了一个静态方法printValur,用于打印传入的字符串。al.forEach(AcceptMethod::printValur),我们将printValur方法应用到ArrayList中的每个元素上,实现了打印每个元素的功能。*/al.forEach(AcceptMethod::printValur);//下面的方法和上面等价的Consumer<String> methodParam = AcceptMethod::printValur; //方法参数/**Lambda表达式x -> methodParam.accept(x)定义了一个匿名函数,它接受一个参数x,并调用methodParam.accept(x)来处理这个参数。这段代码的作用是遍历List中的每个元素,并将每个元素作为参数传递给methodParam.accept方法进行处理。*/al.forEach(x -> methodParam.accept(x));//方法执行accept}
}
上面的所有方法执行玩的结果都是如下:
print value : a
print value : b
print value : c
print value : d