java-lambda

lambda表达式

匿名内部类:可以是接口,可以是抽象类,可以是具体类。
lambda表达式:只能是接口

匿名内部类:接口中可以有多个抽象方法
lambda表达式:接口中只能有一个抽象方法

new Thread(new Runnable(){
    public void run(){
		sout("匿名内部类创建类接受参数为接口")}
}).start();

new Thread(() -> {
	sout("类接受参数为接口的lambda表达式")
}).start();

method(new interface(){
	public void run(){
		sout("匿名内部类形式调用形参为接口的方法")
	}
});

method(() -> {
	sout("lambda表达式形式调用形参为接口的方法");
});

//参数的类型可以省略
//多个参数时,不能只省略一个
method((int x) -> {
	return x;
});
method((x) -> {
	return x;
});

//如果参数只有一个,小括号可以省略
method(x->{
	return x;
});
//如果代码块语句只有一条,可以省略大括号和分号省略
//如果代码块包括return,return也要省略
method(x->sout(x));
method(x->x);

引用类方法

格式:类名::静态方法
范例:Integer::parseInt。将string转换为int类型数据
lambda表达式被类方法替代的时候,他的形式参数全部传递给静态方法

public class world {
    public static void main(String[] args) {
//        useConverter((String s)->{
//            return Integer.parseInt(s);
//        });
//        useConverter(s -> Integer.parseInt(s));
        useConverter(Integer::parseInt);
    }
    private static void useConverter(Converter converter){
        System.out.println(converter.resu("100"));
    }
}

引用对象的实例方法

格式:对象::成员方法
范例:“helloworld”::toUpperCase。将所有字符转大写
lambda表达式被对象的实例方法替代的时候,他的形式参数全部传递。

public class PrinterDemo {
    public static void main(String[] args) {
//        usePrinter(s -> System.out.println(s.toUpperCase()));
        PrintString printString = new PrintString();
        usePrinter(printString::printUpper);
        
    }
    private static void usePrinter(Printer p){
        p.printUpperCase("helloworld");
    }
}

引用类的实例方法

引用类中的成员方法
格式:类名::成员方法
范例:String::substring。截取字符串的长度
lambda表达式被类的实例方法代替的时候,第一个参数作为调用者,后面的参数传递给该方法作为参数

public class subDemo {
    public static void main(String[] args) {
//        usemySub((String s,int x,int y)->{
//            return s.substring(x,y);
//        });
//        usemySub((s, x, y) -> s.substring(x, y));
        usemySub(String::substring);
    }

    public static void usemySub(mySub mysub) {
        System.out.println(mysub.sub1("helloworld", 1, 4));
    }
}

引用构造器

格式:类名::new
范例:Student::new
lambda表达式被构造器替代的时候,他的形式参数全部传递。

public class StudentDemo {
    public static void main(String[] args) {
        useStudent(((name, age) -> new Student(name,age)));
//        useStudent(Student::new);
    }
    private static void useStudent(StudentBuilder s){
        Student student = s.build("java",10);
        System.out.println(student.getName()+student.getAge());
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值