Lambda表达式简述

一、概述

Lambda表达式(λ expression)是从Java8增加的新语法。大体上相当于其他语言的“匿名函数”或“函数指针。在Java中它实际上是“匿名类的一个实例”。
  Lambda表达式的基本写法:参数->结果
    参数是()或1个参数或 (多个参数)
    结果是指 表达式 或 语句 或 {语句}

二、应用

1)线程例子
  new Thread( ()->{ … } ).start();
  2)积分例子
  d = Integral( x->Math.sin(x), 0, 1, EPS );
  d = Integral( x->x*x, 0, 1, EPS );
  d = Integral( x->1, 0, 1, EPS );
  3)按钮事件处理
  btn.addActionListener( e->{ … } ) );

public doIt = new Runnable(){
	public void run(){
		System.out.println("aaa");
	}
};
new Thread(dolt).start();

以上程序用Lambda表达式改写成一行代码:

new Thread(()->System.out.println("aaa")).start();

Lambda表达式是接口或者说是接口函数的简写。

double d = Integral(new Fun(){
	public double fun(double x){
		return Math.sin(x);
	}
},0,Math.PI,1e-5);

使用Lambda表达式:

double d = Integral(x->Math.sin(x),0,Math.PI,1e-5);

由于Lambda表达式只能表示一个函数,所以能写成Lambda的接口要求包含且最多只能有一个抽象函数。这样的接口可以(但不强求)用注记@FunctionalInterface来表示。称为函数式接口。

/*函数式接口举例*/
@FunctionalInterface
interface Fun {double fun(double x);}
/*
实例:排序
*/
import java.util.*;
class Person
{
	public String name;
	public int age;
	public double score;
	public Person(String n, int a, double s) {
		name = n; age = a; score = s;
	}
	public String getName(){ return name;}
	public String toString() {
		return String.format("%s[%d](%f)", name,age,score);
	}
	public static int better(Person p1, Person p2) {
		return (int)(p2.score - p1.score);
	}
}
class LambdaSortPerson {
   public static void main(String... args) {
    Person[] people = new Person[] {
      new Person("Ted", 18, 91),
      new Person("Charlotte", 19, 88),
      new Person("Michael", 20, 99),
      new Person("Matthew", 21, 84)
    };
	Comparator<Person> compareAge =
		(p1, p2) -> p1.age-p2.age;
	Arrays.sort(people, compareAge);
	Arrays.sort(people, 
		(p1, p2) -> p1.age-p2.age);
	Arrays.sort(people, 
		(p1, p2) -> (int)(p1.score-p2.score));
	Arrays.sort(people, 
		(p1, p2) -> p1.name.compareTo(p2.name));
	Arrays.sort(people, 
		(p1, p2) -> -p1.name.compareToIgnoreCase(p2.name));
	Comparator<Person> cf =  Person::better; 
    Arrays.sort(people, cf);
    Arrays.sort(people, Person::better);   
	Arrays.sort(people,  Comparator.comparing(
		Person::getName));	
	for (Person p : people)
      System.out.println(p);
  } 
}

由此可见,Lambda表达式不仅仅是简写了代码,更重要的是:它将代码也当成数据来处理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值