Lambda表达式与函数式接口

本文详细介绍了 Java 中 Lambda 表达式的使用方法及优势,包括基本语法、常见写法,并通过具体示例对比了匿名类、Lambda 表达式和函数式接口的不同实现方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Lambda表达式的基本写法: (参数)->表达式或{语句}  ,即它是一个匿名函数,在参数和函数体之间用“->”来表示。

常见的写法:

(int x) -> {return x+1} //单个参数
(int x) -> x+1 //返回值直接用表达式
(x) -> x+1 //省略参数的类型
x -> x+1 //如果只有一个参数,则参数的圆括号可省略
(x,y) -> x+y //两个参数
(Person) -> {System.out.pirntln(person.age)} //返回void
(n) -> { double f=1; for(int i=0;i<n;i++)s*=i; return f; } //复杂语句
() -> {System.gc();} // 0个参数

函数式接口:在能使用Lambda表达式的地方,可以直接使用函数表达式。其常见写法: 类名::方法名 。


下面的例子是对与同样的Arrays.sort方法(比较数组特定元素),接口、匿名类、Lambda表达式、函数表达式这几种写法都可以,

其中Lambda表达式最为简洁。

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

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 LambdaArraySort {
	public static void main(String[] args) {
		Person[] people = new Person[] {
				new Person("Ted", 18, 9),
				new Person("charlotte", 19, 88),
				new Person("Michael", 20, 99),
				new Person("matthew", 21, 84)
		};
		
		//使用匿名类来实现接口Comparator,比较age
		Arrays.sort(people,new Comparator() {
			public int compare(Object p1,Object p2) {
				return ((Person)p1).age-((Person)p2).age;
			}
		});
		
		//使用Lambda表达式赋值给接口,比较age
		Comparator<Person> compareAge=
				(p1,p2)->p1.age-p2.age;
		Arrays.sort(people,compareAge);
		
		//直接使用Lambda表达式做函数的参数,比较age、score、name
		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));
		
		//使用函数表达式,比较score
		Comparator<Person> cf= Person::better;
		Arrays.sort(people,cf);
		Arrays.sort(people,Person::better);
		
		for(Person p:people)
			System.out.println(p);
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值