java8(二)方法引用
发布时间:2020-12-15 08:24:18 所属栏目:Java 来源:网络整理
导读:方法引用让你可以重复使用现有的方法定义,并像 Lambda 一样进行传递。 方法引用可以被看作仅仅调用特定方法的 Lambda 的一种快捷写法。 事实上,方法引用就是让你根据已有的方法实现来创建 Lambda 表达式。 例: @Testpublic void test1() { Chat chat = (c
方法引用让你可以重复使用现有的方法定义,并像 Lambda 一样进行传递。 方法引用可以被看作仅仅调用特定方法的 Lambda 的一种快捷写法。 事实上,方法引用就是让你根据已有的方法实现来创建 Lambda 表达式。 例: @Test public void test1() { Chat chat = (content) -> System.out.println(content); chat.say("hello!"); } @Test public void test2() { Chat chat = System.out::println; chat.say("hello!"); } interface Chat { void say(String word); } test1是 Lambda 表达式写法,通过调用 println 方法输出 content。test2 是方法引用,这里看起来方法引用更加的简洁明了。看完例子,再来看看语法。 语法这里把方法引用分为5种 1.静态方法引用:ClassName::staticMethod 2.特定类的任意对象的方法引用:ClassName::instanceMethod 3.特定对象的方法引用:instance::instanceMethod 4.构造器引用:ClassName::new 5.数组引用:ClassName[]::new 举例语法没看懂,没关系,我们举例来说明-_- 1.静态方法引用 @Test public void test3() { // Function<T,R> 接受一个输入参数,返回一个结果。(java8定义的函数式接口) Function<Integer,String> f1 = (s) -> String.valueOf(s); // 将传入的类型转换成String System.out.println(f1.apply(100) + 200); // 输出100200 Function<Integer,String> f2 = String::valueOf; // 将传入的类型转换成String System.out.println(f2.apply(100) + 200); // 输出100200 } 2.特定类的任意对象的方法引用 @Test public void test4() { // Function<T,R> 接受一个输入参数,返回一个结果。(java8定义的函数式接口) Function<String,Integer> f1 = (s) -> s.length(); // 返回字符串长度 System.out.println(f1.apply("hello")); // 输出5 Function<String,Integer> f2 = String::length; // 返回字符串长度 System.out.println(f2.apply("hello")); // 输出5 } 3.特定对象的方法引用 @Test public void test5() { String s = "hello"; // IntSupplier 无参数,返回一个int类型结果。(java8定义的函数式接口) IntSupplier intSupplier1 = () -> s.length(); // 返回字符串长度 System.out.println(intSupplier1.getAsInt()); // 输出5 IntSupplier intSupplier2 = s::length; // 返回字符串长度 System.out.println(intSupplier2.getAsInt()); // 输出5 } 4.构造器引用 @Test public void test6() { // Supplier<T> 无参数,返回一个结果。(java8定义的函数式接口) List list1 = this.getList(() -> new ArrayList()); List list2 = this.getList(ArrayList::new); } public static List getList(Supplier<List> s){ return s.get(); } 5.数组引用 @Test public void test7() { // Function<T,String[]> f1 = length -> new String[length]; String[] strs = f1.apply(10); System.out.println(strs.length); // 输出10 Function<Integer,String[]> f2 = String[]::new; strs = f2.apply(10); System.out.println(strs.length); // 输出10 } 参考资料
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |