23.Lambda表达式

这篇具有很好参考价值的文章主要介绍了23.Lambda表达式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Lambda表达式

一、Lambda表达式背景

Lambda 表达式(lambda expression)是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象(lambda abstraction),是一个匿名函数,即没有函数名的函数。Lambda表达式可以表示闭包(注意和数学传统意义上的不同)。Lambda表达式是Java SE 8中一个重要的新特性。lambda表达式允许你通过表达式来代替功能接口。 lambda表达式就和方法一样,它提供了一个正常的参数列表和一个使用这些参数的主体(body,可以是一个表达式或一个代码块)。

二、Lambda表达式基本语法

()->{}

23.Lambda表达式

Lambda表达式由三部分组成:

  • 参数:类似方法中的形参列表,这里的参数是函数式接口里的参数。这里的参数类型可以明确的声明,也可不声明而由JVM隐含的推断。另外当只有一个参数时可以省略掉圆括号。
  • ->:可理解为“应用于”的意思
  • 方法体:可以是表达式也可以代码块,是函数式接口里方法的实现。代码块可返回一个值或者什么都不反
    回,这里的代码块块等同于方法的方法体。如果是表达式,也可以返回一个值或者什么都不反回。

三、Lambda函数式接口

要想了解什么是Lambda表达式,首先要了解什么是函数式接口。所谓函数式接口:
首先:接口中只能有一个抽象方法,那么这个接口就是函数式接口
其次:可以在接口中使用@FunctionalInterface注解,使编译器按照函数是接口进行要求,如果在接口中存在多个抽象方法,编译器就会提示。
第三:如果你可以保证你的接口中确实只有一个方法,那么编译器就会默认为函数式接口,不会因@FunctionalInterface注解而定。

@FunctionalInterface
public interface IFuncationInterface {
	//注意:只能有一个方法存在,如果不加入@FunctionalInterface,编译器会根据情况而定
	public void say();
}

public static void main(String[] args) {
	//声明接口对象,通过Lambda表达式实现方法
	IFuncationInterface funcationInterface=()->{System.out.println("大家好,我是Lambda表达式");};
	//调用接口方法
	funcationInterface.say();
}

23.Lambda表达式

四、Lambda表达式使用

//无参数无返回值的方法
@FunctionalInterface
public interface IOneInterface {
	public void say();
}
//无参数有返回值的方法
public interface ITwoInterface{
	public String say();
}
//有参数有返回值的方法
public interface IThreeInterface {
	public String say(String name,int age);
}

public static void main(String[] args) {
		
	//无参数无返回值方法
	IOneInterface oneInterface=()->System.out.println("我是无返回值无参数方法");
	oneInterface.say();
		
	//无参数有返回值方法
	ITwoInterface twoInterface=()->"我是有返回值无参数方法,我只有一句话,所以我省略return";
	String str=twoInterface.say();
	System.out.println(str);
		
	//有参数有返回值方法
	IThreeInterface threeInterface=(name,age)->name+"今年"+age+"岁了,所以我是一个有参数有返回值的方法";
	String s=threeInterface.say("张三",18);
	System.out.println(s);
	}

23.Lambda表达式
使用Lambda时,要记住的就两点:

  • Lambda返回的是接口的实例对象
  • 有没有参数、参数有多少个、需不需要有返回值、返回值的类型是什么---->选择自己合适的函数式接口

五、Lambda表达式特点

  • 参数类型可以省略,如果需要省略,每个参数的类型都要省略。
  • 参数的小括号里面只有一个参数,那么小括号可以省略。
  • 如果方法体当中只有一句代码,那么大括号可以省略。
  • 如果方法体中只有一条语句,其是return语句,那么大括号可以省略,且去掉return关键字。

优点:
代码简洁,开发迅速
方便函数式编程
非常容易进行并行计算
Java 引入 Lambda,改善了集合操作
缺点:
代码可读性变差
在非并行计算中,很多计算未必有传统的 for 性能要高
不容易进行调试

总结:Lambda表达式能够帮助我们快速完成代码,使代码更简洁,更直观的去实现内容,同时也为我们阅读代码增加了一定的难度

六、Lambda表达式集合中的应用

实现List集合循环

List<String> strList=new ArrayList<String>();
strList.add("Hello");
strList.add("World");
strList.add("Hello");
strList.add("Java");
strList.add("World");
		
strList.forEach(str->System.out.println(str));

实现Set集合循环

Set<String> strList=new HashSet<String>();
strList.add("Hello");
strList.add("World");
strList.add("Hello");
strList.add("Java");
strList.add("World");
		
strList.forEach(str->System.out.println(str));

实现Map集合循环

Map<Integer,String> strList=new HashMap<Integer,String>();
strList.put(1,"Hello");
strList.put(2,"World");
strList.put(3,"Hello");
strList.put(4,"Java");
strList.put(5,"World");
		
strList.forEach((i,s)->System.out.println(i+"---"+s));

七、方法引用

在使用Lambda表达式时,我们有时会遇到这样的写法

List<String> strList=new ArrayList<String>();
strList.add("Hello");
strList.add("World");
strList.add("Hello");
strList.add("Java");
strList.add("World");
		
strList.forEach(str->System.out.println(str));
//这样写也可以实现?
strList.forEach(System.out::println);


答案是肯定的,这样写确实可以实现,这种形式,是Lambda表达式中更简洁的写法,方法的引用。

如果函数式接口的实现恰好可以通过调用一个方法来实现,那么我们可以使用方法引用

方法的引用包含文章来源地址https://www.toymoban.com/news/detail-437229.html

  • 引用普通方法
  • 引用静态方法
  • 引用构造方法
public class ImplementInterface{
	public static void say(String name) {
		System.out.println(name);
	}
	
	public void say1(String name) {
		System.out.println(name);
	}

	public ImplementInterface() {
		System.out.println("我是构造方法");
	}
}
public static void main(String[] args) {
		
	//通过类调用静态方法
	Consumer<String> consumer=ImplementInterface::say;
	consumer.accept("我是静态方法");

	//通过对象调用普通方法
	ImplementInterface implementInterface=new ImplementInterface();
	Consumer<String> consumer2=implementInterface::say1;
	consumer2.accept("我是普通方法");
		
	//通过类调用构造方法
	Supplier<ImplementInterface> supplier=ImplementInterface::new;
	System.out.println(supplier.get());
}

到了这里,关于23.Lambda表达式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 什么是Lambda表达式?

    Lambda表达式是Java 8引入的一个重要特性,用于简化函数式编程中的匿名函数的定义和使用。它可以被视为一种轻量级的匿名函数,可以作为参数传递给方法或存储在变量中。 Lambda表达式的语法形式如下: 其中: parameters:表示方法的参数列表,可以是空的,或者包含一个或多

    2024年02月09日
    浏览(35)
  • Lambda表达式常用场景

    如果你的集合里泛型是ListString,那么可以直接用String.join(\\\",\\\",你的集合),把它变为字符串。 String.join(\\\",\\\", yourList) 但是如果你的集合是,ListInteger、ListLong,那么String.join这个方法就不适应了. 你可以用lamba表达式 String string= longs.stream().map(Object::toString).collect(Collectors.joining(\\\",\\\")); 方

    2024年02月11日
    浏览(33)
  • C#-Lambda 表达式

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 C# 中的lambda 表达式 Lambda表达式是一个匿名函数,基于数学中的λ演算得名。它是一个没有函数名的函数,可以直接表示闭包。Lambda表达式可以表示在数学传统意义上不同的闭包,因为它们具有定义域内

    2024年01月25日
    浏览(29)
  • Java- Lambda表达式

    目录 一、Lambda简介 二、Lambda使用前提 三、Lambda语法 1.操作符 a.\\\"-\\\"  b.\\\"::\\\" 2.格式  a.无参数 b.有参数 四、Lambda演化过程 五、Lambda实现排序 Lambda 表达式,也可称为闭包,它是推动 Java 8 发布的最重要新特性。Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中)

    2024年02月03日
    浏览(65)
  • 深入理解lambda表达式

    var builder = WebApplication.CreateBuilder(args); var app = builder.Build(); app.Use(async (context, next) = { // Add code before request. }); 这段C#代码是用于设置ASP.NET Core应用中的中间件。下面是详细解释: app.Use : 这个方法是用来向应用的请求处理管道中添加一个中间件的。在ASP.NET Core中,中间件用于处

    2024年02月20日
    浏览(31)
  • Lambda表达式(JAVA)

    注:如果没有学过 匿名内部类 和 接口 不推荐往下看。 (parameters) - expression 或 (parameters) -{ statements; } parameters:表示参数列表; -:可理解为“被用于”的意思; expression:表示一条语句; statements:表示多条语句。 Lambda可以理解为:Lambda就是匿名内部类的简化。 lambda表达式

    2024年02月08日
    浏览(45)
  • Java Lambda 表达式

    💗wei_shuo的个人主页 💫wei_shuo的学习社区 🌐Hello World ! Java Lambda 表达式是 Java 8 引入的一种函数式编程特性,它是一种轻量级的匿名函数,允许我们将函数作为方法的参数进行传递。Lambda 表达式可以理解为是一种简洁的方式来表示可传递的代码块,它可以替代传统的匿名内

    2024年02月08日
    浏览(46)
  • 「JavaSE」Lambda表达式

    🎇 个人主页 :Ice_Sugar_7 🎇 所属专栏 :快来卷Java啦 🎇 欢迎点赞收藏加关注哦! Lambda表达式是Java SE 8中一个重要的新特性,基于数学中的λ演算得名,也可称为闭包, 它允许我们通过 表达式 代替功能接口 和方法类似,Lambda表达式提供了一个正常的参数列表和一个使用这

    2024年04月11日
    浏览(41)
  • C++lambda表达式

                                                              🎬慕斯主页 : 修仙—别有洞天                                                          ♈️ 今日夜电波:Duvet—Bôa                                                

    2024年02月03日
    浏览(37)
  • Java Lambda表达式

    1.1 函数式编程思想概括 在数学中,函数就是有输入量、输出量的一套计算方案,也就是“拿数据做操作” 面向对象思想强调“必须通过对象的形式来做事情” 函数式思想则尽量忽略面

    2024年02月07日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包