Lambda表达式

196 阅读1分钟
函数式编程思想(强调做什么,不是是么形式做),不同于面向对象的思想(做事找对象,对象调方法,完成事情)。 简化匿名内部类的书写

lambda表达式格式:

    (参数列表)->{重写方法的代码}
解释:
    1.():指重写方法所要用到的参数列表,多个参数用','隔开
    2.->传递,把参数传递给方法体

lambda表达式使用前提

    1.使用Lambda表达式必须有接口,且接口中有且仅有一个抽象方法(该接口称为“函数式接口”)
        例:JDK内置的Runnable、comparator接口
    2.使用lambda表达式必须具有"上下文推断"
eg1.(无参数无返回值)
interface Cook{
	public abstract void makeFood();
}

public class demo_Lambda {
	public static void invokeCook(Cook c) {
		c.makeFood();
	}
	public static void main(String[] args) {
		invokeCook(()->{
			System.out.println("吃饭@");
		});
	}
}
eg2.
package demo;

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

class Person{
	private String name;
	private int age;
	
	public Person() {
	}

	
	
	public Person(String name, int age) {
		this.name = name;
		this.age = age;
	}

	

	@Override
	public String toString() {
		return "Person [name=" + name + ", 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;
	}
	
}

public class demo_Lambda {

	public static void main(String[] args) {
		Person []p= {new Person("佟丽娅",20),
				new Person("宋佳", 18),
				new Person("关晓彤", 48)};
		Arrays.sort(p,(Person arg0, Person arg1)-> {
			return arg0.getAge()-arg1.getAge();
		});
//		Arrays.sort(p,new Comparator<Person>() {
//
//			@Override
//			public int compare(Person arg0, Person arg1) {
//				return arg0.getAge()-arg1.getAge();
//			}
//		});
		
		for(Person per: p)
		System.out.println(per.toString());
	}
}

lambda表达式省略规则:

    1.小括号内的参数类型可以省略
    2.如果小括号内的参数有且仅有一个,则小括号可以省略
    3.若大括号里有且仅有一个语句,则无论有无返回值均可省略大括号、return关键字和分号。
        注意:大括号、return关键字和分号三者必须同时省去或者不省去

eg.

	Arrays.sort(p,(Person arg0, Person arg1)-> {
			return arg0.getAge()-arg1.getAge();
		});
->
    Arrays.sort(p,(Person arg0, Person arg1)->arg0.getAge()-arg1.getAge());