java中Lambda表达式应用

Lambda表达式
Lambda表达式也称闭包,允许把函数作为一个方法的参数(函数作为参数传递进方法中),或者把代码看成数据。Lambda表达式用于简化java中接口式匿名内部类。被称为函数式接口的概念。函数式接口就是一个具有一个方法的普通接口。像这样的接口,可以被隐式转换为Lambda表达式。

语法:(参数1,参数2...)->{...}

1、没有参数使用Lambda表达式
2、带参数时使用Lambda表达式
3、代码块中只依据代码时使用Lambda表达式
4、代码块中有多句代码时使用Lambda表达式
5、有返回值的代码块
6、参数中使用final关键字

Lambda表达式好处:
1、代码更简洁
2、不会单独生成class文件

接口中默认方法和静态方法

interface A{
	public default void print(){}
	public static void method(){}
}

默认方法与静态方法并不影响函数式接口的契约,可以任意使用

示例代码:

package com.booy1;

public class LambdaTest {

	public static void main(String[] args) {
		//常规写法
		IEat ieat = new IEatImpl();
		ieat.eat();
		//接口式匿名内部类写法
		IEat ieat2 = new IEat() {
			public void eat() {
				System.out.println("eat...banner");
			}
		};
		ieat2.eat();
		//Lambda表达式写法
//		IEat ieat3 = ()->{System.out.println("eat...orange");};
		
		//没有参数时使用
//		IEat ieat3 = ()->System.out.println("eat...orange");
//		ieat3.eat();

		//带参数时使用,参数类型可以省略
//		IEat ieat3 = (thin,name)->System.out.println("eat...orange"+thin+name);
//		ieat3.eat("orange","小咯");
		
		//带参数时使用,参数的类型可以省略,代码块中有多行代码
//		IEat ieat3 = (thin,name)->{
//			System.out.println("eat...orange"+thing);
//			System.out.println(name);
//			};
//		ieat3.eat("orange","小咯");
		
		//带返回值的方法
//		IEat ieat3 = (thin,name)->{
//			System.out.println("eat...orange"+thing);
//			return 10;
//			};
//		ieat3.eat("orange","小咯");
		
		//带返回值只有一句实现代码
		IEat ieat3 = (thin,name)->thing==null?1:0;	
	}
}

//只有一个抽象方法的接口
interface IEat{
	void eat(String thing,String name);
}
//接口实现类
class IEatImpl implements IEat{
	public void eat() {
		System.out.println("eat...apple");
	}
}

实例代码:
主类:

package com.booy1;

import java.util.Arrays;
import java.util.Comparator;

public class LambdaTest {
	public static void main(String[] args) {		
		Student[] students = {
				new Student("张三",15),
				new Student("李四",25),
				new Student("王麻子",18)};
//		Arrays.sort(students,new Comparator<Student>() {
//			public int compare(Student o1,Student o2) {
//				return o1.getAge()-o2.getAge();
//			};
//		});
//		Comparator<Student> c = (o1,o2)->o1.getAge()-o2.getAge();
		Arrays.sort(students,(o1,o2)->o1.getAge()-o2.getAge());
		System.out.println(Arrays.toString(students));
	}
}

student类:

package com.booy1;

public class Student {
	private String name;
	private int age;
	public Student() {
		super();
	}
	public Student(String name, int age) {
		super();
		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;
	}
	@Override
	public String toString() {
		return "Student [name=" + name + ", age=" + age + "]";
	}	
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值