赞
踩
/* 需求: 1.定义一个接口(Printable):里面定义一个抽象方法:void printString(String s); 2.定义一个测试类(PrintableDemo),在测试类中提供两个方法 一个方法是:userPrintable(Printable p) 一个方法是主方法,在主方法中调用usePrintable方法 */ interface Printable{ void printString(String s); } public class PrintableDemo{ public static void main(String[] args) { //在主方法中调用usePrintable方法 //Lambda userPrintable(s -> System.out.println(s)); //方法引用符:: userPrintable(System.out::println); //可推导的就是可省略的 } private static void userPrintable(Printable p){ p.printString("爱生活,爱Java"); } }
::
该符号为引用运算符,而它所在的表达式被称为方法引用。usePrintable(s -> System.out.println(s));
usePrintable(System.out::println);
Integer::parseInt
interface Converter{ int convert(String s); } public class ConverterDemo{ public static void main(String[] args) { //Lambda useConverter(s -> Integer.parseInt(s)); //引用类方法 useConverter(Integer::parseInt); //Lambda表达式被类方法替代的时候,它的形式参数全部传递给静态方法作为参数 //将Lambda中的s参数传递给静态方法parseInt,也就是如果Lambda中有多个参数,那么对应的静态方法就有多个 } private static void useConverter(Converter c){ int number = c.convert("666"); System.out.println(number); } }
"HelloWorld"::toUpperCase
class PrintString{ //吧字符串参数变成大写的数据,然后再控制台输出 public void printUpper(String s){ String result = s.toUpperCase(); System.out.println(result); } } interface Printer{ void printUpperCase(String s); } public class PrinterDemo{ public static void main(String[] args) { //在主方法中调用usePrinter方法 // usePrinter((String s) ->{ // //String result = s.toUpperCase(); // //System.out.println(result); // // //System.out.println(s.toUpperCase()); // }); //Lambda usePrinter(s -> System.out.println(s.toUpperCase())); //引用对象的实例方法 PrintString ps = new PrintString(); usePrinter(ps::printUpper); //Lambda表达式被对象的实例方法替代的时候,它的形式参数全部传递给该方法作为参数 //Lambda表达式里面的形式参数s需要全部传递给printUpper方法作为参数 } private static void usePrinter(Printer p){ p.printUpperCase("HelloWorld"); } }
String::substring
public String substring(int beginIndex,int endIndex)
interface MyString{ String mySubString(String s, int x, int y); } public class MyStringDemo { public static void main(String[] args) { //在主方法中调用useMyString方法 //Lambda useMyString((String s,int x, int y) ->{ return s.substring(x,y); }); useMyString((s,x,y) -> s.substring(x,y)); //引用类的实例方法 useMyString(String::substring); //Lambda表达式被类的实例方法替代的时候 //第一个参数作为调用者 //后面的参数全部传递给该方法作为参数 } private static void useMyString(MyString my){ String s = my.mySubString("HelloWorld", 2, 5); System.out.println(s); } }
Student::new
class Student{ private String name; private int age; public Student() { } public Student(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } } interface StudentBuilder{ Student build(String name,int age); } public class StudentDemo { public static void main(String[] args) { //在主方法中调用useStudentBuilder方法 useStudentBuilder((String name, int age)->{ return new Student(name,age); }); //Lambda useStudentBuilder(((name, age) -> new Student(name,age))); //引用构造器 useStudentBuilder(Student::new); //Lambda表达式被构造器替代的时候,它的形式参数全部传递给构造器作为参数 } private static void useStudentBuilder(StudentBuilder sb){ Student s = sb.build("林青霞", 30); System.out.println(s.getName()+","+s.getAge()); } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。