博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
lambda表达式和方法引用
阅读量:4539 次
发布时间:2019-06-08

本文共 3376 字,大约阅读时间需要 11 分钟。

lambda表达式和方法引用是孪生兄弟,方法引用的使用在很多情况下简化了lambda表达式。

方法引用符  ::

由lambda表达式简化得到方法引用,体验方法引用:

1 package cn.ftf.add; 2  3 public class PrintableDemo { 4     public static void main(String[] args) { 5         //lambda表达式 6         print(s->System.out.println(s)); 7         //方法引用 8         print(System.out::println); 9     }10     static void print(Printable p) {11         p.printString("hello word!");12     }13 }14 15 interface Printable {16     void printString(String s);17 18 }

引用类方法:

1 package cn.ftf.add; 2 /** 3  * 引用类方法,例将字符串通过Integer.parseInt()转化为大写字符串 4  * @author 房廷飞 5  * 6  */ 7 public class ConverterDemo { 8     public static void main(String[] args) { 9         useConverter(Integer::parseInt);10     }11     static void useConverter(Converter con) {12         int a=con.convert("34");13         System.out.println(a);14     }15 }16 17 interface Converter {18     int convert(String a);19 20 }

引用对象的实例方法:

1 package cn.ftf.add; 2 /* 3  * 引用对象的实例方法 4  */ 5 public class PrinterDemo { 6     public static void main(String[] args) { 7         //使用lambda表达式 8         usePrinter(s->System.out.println(s.toUpperCase())); 9         //使用对象的实例方法10         PrintString pr=new PrintString();11         usePrinter(pr::printUpper);12         13         //如果方法是静态的就直接类::方法名14         usePrinter(PrintString::printUpper1);15     }16     static void usePrinter(Printer pr){17         pr.printUpperCase("hello word!");18     }19 }20 21 interface Printer {22     void printUpperCase(String a);23 }24 25 class PrintString {26     public void printUpper(String str) {27         System.out.println(str.toUpperCase());28     }29     static void printUpper1(String str) {30         System.out.println(str.toUpperCase());31 32     }33 34 }

引用类的实例方法:

1 package cn.ftf.add; 2 /* 3  * 引用类的实例方法 4  */ 5 public class MyStringDemo { 6     public static void main(String[] args) { 7         //使用lambda表达式 8         useMyString((str,a,b)->str.substring(a, b)); 9         //使用类中的实例方法10         useMyString(String::substring);11         //lambda表达式被类的实例方法替代的时候,第一个参数最为调用者,后面的参数作为方法参数,如上例    12     }13     static void useMyString(MyString mys) {14         String str=mys.mySubString("hello", 2 ,4);15         System.out.println(str);16     }17 }18 interface MyString{19     String mySubString(String str,int a,int b);20 }

引用构造器:

1 package cn.ftf.add; 2 /* 3  * 引用构造器 4  */ 5 public class StudentDemo { 6     public static void main(String[] args) { 7         //lambda表达式 8         useStudentBuilder((s,a)->new Student(s, a)); 9         //引用构造器10         useStudentBuilder(Student::new);11         //将参数全部传到构造器中12     }13     private static void useStudentBuilder(StudentBuilder stu) {14         Student s= stu.build("小飞", 20);15         System.out.println(s.getName()+"  "+s.getAge());16         17     }18 19 }20 21 22 class Student{23     public Student(String name, int age) {24         super();25         this.name = name;26         this.age = age;27     }28     String name;29     int age;30     public String getName() {31         return name;32     }33     public void setName(String name) {34         this.name = name;35     }36     public int getAge() {37         return age;38     }39     public void setAge(int age) {40         this.age = age;41     }42     43 }44 interface StudentBuilder{45     Student build(String name,int age);46 }

 

转载于:https://www.cnblogs.com/fangtingfei/p/11275737.html

你可能感兴趣的文章
1万台币等于多少人民币(2014年04月22日)
查看>>
无法安装64位office,因为您的PC上有32位
查看>>
java实现发送邮件功能
查看>>
Ubuntu 18.04 启用 rc.local 设置开机启动
查看>>
Single Number
查看>>
PostgreSQL之时间戳自动更新
查看>>
常用文件后缀名与打开方式
查看>>
怎么读取照片内的文字
查看>>
php 发送邮件代码
查看>>
execCommand()命令详解及实例展示
查看>>
NSString NSCFString区别
查看>>
C#winform自定义控件模拟设计时界面鼠标移动和调节大小、选中效果
查看>>
DIV非偏移放大
查看>>
Jquery 展开收起
查看>>
css的选择器优先级
查看>>
C#快捷键
查看>>
linux下安装mysql
查看>>
selenium+Python(处理html5的视频播放)
查看>>
在Winform开发中使用FastReport创建报表
查看>>
C# 反射研究
查看>>