⛳ java8 :: 用法 (JDK8 双冒号用法)

⛳ 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

你可能感兴趣的:(Java基础知识,java,开发语言)