Java中的lambda表达式

本文详细介绍了Java中的Lambda表达式,包括其语法、功能和常见应用场景。通过实例展示了如何使用Lambda实现函数式接口,如Consumer、Supplier、Function和Predicate。此外,还探讨了Lambda表达式的简化形式,如方法引用。文章还提供了Lambda在四大内置函数式接口中的使用示例,帮助读者深入理解和运用Lambda表达式在实际编程中的价值。
部署运行你感兴趣的模型镜像

什么是lambda表达式?

允许将函数作为一个方法的参数(将一个方法传递到另外的方法中执行),本质上可以理解为是一种语法糖。

语法格式

(参数列表)->表达式     //(k1,k2)->k1+k2

(参数列表)->{代码块;}  //(k1,k2)->{return k1+k2;}

举个列子:

1、首先定义一个函数式接口,接口中只能有一个抽象方法

public interface MathOperation{
    int operate(int a, int b);
}

2、在测试类Test中具体使用接口

public int operator(int a,int b,MathOperation operation){
    int res=operation.operate(a,b);
    System.out.println("结果:"+res);
}

3、调用处通过lambda表达式提供接口的实现

MathOperation addition=(int a, int b)->a+b;//此处可以写成(a,b)->a+b,还可以写成(int a.int b)->{return a+b};
Test test=new Test();
System.out.println("1+2="+test.operator(10,5,addition));

内置四大函数式接口

一、Consumer消费性接口 void accept(T t)

方法定义:

public void bb(double num,Consumer<Double> consumer){
    consumer.accept(num);
}

具体调用:

Test test = new Test();
test.bb(111,num->System.out.println(num));


二、Supplier供给性接口 T get()

//产生指定个数num的整数,并放入集合中
public class TestSupplier {
	//具体调用
	public static void main(String[] args) {
		List<Integer> res = getNumList(10, () -> (int) (Math.random() * 200));
		System.out.println(res);
	}

	private static List<Integer> getNumList(int num, Supplier<Integer> supplier) {
		List<Integer> res = new ArrayList<>();
		for (int i = 0; i < num; i++) {
			Integer tmp = supplier.get();
			res.add(tmp);
		}
		return res;
	}

}


三、Function函数式接口 R apply(T t)

//进行字符串的转换处理
public class TestFunction {
public static void main(String[] args) {
	//具体调用
	 String str1=handleString("abc",str->str.toUpperCase());
	 System.out.println("upperCase:"+str1);
	 String str2=handleString(" abbc",(String str)->{
		 return str.trim();
	 });
	 
	 System.out.println("trim:"+str2);
}
private static String handleString(String string,Function<String,String>function) {
	return function.apply(string);
}
}


四、Predicate断言式接口 boolean test(T t)

//调用断言对传入的数据进行判断
public class TestPredicate {
	//具体调用
	public static void main(String[] args) {
		List<String> list = Arrays.asList("helle", "dsadsa", "o", "oo", "opoo");
		List<String> res = filterString(list, (str) -> str.length() > 4);//判断字符大于4
		System.out.println(res);
	}

	private static List<String> filterString(List<String> list, Predicate<String> predicate) {
		List<String> res = new ArrayList<>();
		for (String tmm : list) {
			if (predicate.test(tmm))
				res.add(tmm);
		}
		return res;
	}

}

特殊方法:用于简化lambda编程

对象名::实例方法名

public static void main(String[] args) {
	//普通写法
	PrintStream ps = System.out;
	Consumer<String> consumer = (x) -> ps.println(x);
	consumer.accept("111");
	//简写
	Consumer<String> consumer2=ps::println;
    consumer2.accept("222");
	//再简写
	Consumer<String>consumer3=System.out::println;
	consumer3.accept("333");
}

您可能感兴趣的与本文相关的镜像

ACE-Step

ACE-Step

音乐合成
ACE-Step

ACE-Step是由中国团队阶跃星辰(StepFun)与ACE Studio联手打造的开源音乐生成模型。 它拥有3.5B参数量,支持快速高质量生成、强可控性和易于拓展的特点。 最厉害的是,它可以生成多种语言的歌曲,包括但不限于中文、英文、日文等19种语言

Java中的Lambda表达式是一种简洁地表示可传递的匿名函数的方式,它没有名称,但有参数列表、函数体、返回类型,可能还有异常列表。这种表达式可以作为参数传递给方法或从方法返回,使得代码更加紧凑和易读。 ### Lambda表达式的语法 一个基本的Lambda表达式由三部分组成:参数列表、箭头符号`->`以及Lambda体。例如: ```java (parameters) -> expression ``` 或者对于多行语句块: ```java (parameters) -> { statements; } ``` ### 实际应用场景 #### 简化匿名内部类的使用 在Java中,我们经常使用匿名内部类来创建对象并重写其方法。但是,当代码变得复杂时,匿名内部类的可读性会降低。此时,可以使用Lambda表达式来简化代码。例如,使用Lambda表达式替换Runnable接口的实现: ```java new Thread(() -> { // 线程执行的代码 }).start(); ``` #### 在集合类中使用Lambda表达式进行操作 在Java的集合框架中,我们可以使用Lambda表达式对集合进行各种操作,如过滤、映射、排序等。例如,使用Lambda表达式过滤出偶数: ```java List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6); List<Integer> evenNumbers = numbers.stream() .filter(n -> n % 2 == 0) // 过滤偶数 .collect(Collectors.toList()); ``` #### 使用比较器 Lambda表达式也常用于定义比较逻辑,比如对列表进行排序。以下是一个使用Lambda表达式来定义比较器的例子: ```java ArrayList<Integer> list = new ArrayList<>(); list.add(11); list.add(22); list.add(33); list.add(44); System.out.println("排序前:" + list); // Lambda表达式用于降序排序 Collections.sort(list, (o1, o2) -> o2 - o1); System.out.println("排序后:" + list); ``` #### 在Spring框架中使用Lambda表达式进行AOP编程 在Spring框架中,可以使用Lambda表达式进行面向切面编程(AOP),从而实现日志记录、事务管理等常用功能。例如,使用Lambda表达式定义一个切面: ```java @Aspect @Component public class LoggingAspect { @Before("execution(* com.example.service.*.*(..))") public void logBefore(JoinPoint joinPoint) { System.out.println("Entering method: " + joinPoint.getSignature().getName()); } } ``` 以上示例展示了如何利用Lambda表达式简化代码,并提高程序的可读性和维护性[^1]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值