前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java8 lambda表达式

Java8 lambda表达式

作者头像
呼延十
发布2019-07-01 16:19:18
4910
发布2019-07-01 16:19:18
举报
文章被收录于专栏:呼延呼延

前些天在写代码时,突然发现某一位大佬的代码中充斥着stream来操作List,自己的for循环相比之下黯然失色,遂决定要尽快学习一下。接下来突然的一周加班阻塞了我的行程,导致今天才有时间开始。

lambda表达式

lambda表达式允许将函数作为参数传递进方法中。lambda有什么作用呢?我目前的理解是: make your code elegant!!!

在java 8 以前,java是不允许将函数复制给变量的,比如:

代码语言:javascript
复制
		lambda = public void print(String s){
		System.out.println(s);
		}

这种操作是不允许的。

那么在java 8 中,这个lambda是什么类型呢?是一个“函数型接口”,函数型接口与普通接口最大的区别就是函数型接口只有一个函数需要被实现。为了防止后续人员对函数型接口进行添加,java8新增了@FunctionalInterface注解,可以防止函数型接口被添加函数(注意:default和static方法并不受约束,仍旧可以添加使用)。 像这样:

代码语言:javascript
复制
	  @FunctionalInterface
	  public interface MyLambdaInterface {
	    void doSomething(String s);
	  }

ok,做完这些我们就可以开始使用lambda了。下面的代码可以在一个方法中打印字符车。

代码语言:javascript
复制
	MyLambdaInterface lambdaInterface = (e) -> System.out.println(e);
	lambdaInterface.doSomething("huyashi is good!");

这样的情况下已经比java7及以前简洁了太多太多。不信你可以自己用java7实现一个类似的效果。

但是lambda就仅止于此吗?NO!如果你有5个方法,每个方法都是接受String而返回void,每个方法仅仅使用一次。java7却要求定义5个不同的接口实现类,而lambda只需要5行代码。

上述情况只是lambda的最简单使用姿势,你当然可以定义负责的接口,如多个参数,具有返回值,只需要在赋值lambda时用花括号将函数的实现括起来就好。

一个简单的小栗子:

代码语言:javascript
复制
	@FunctionalInterface
	  public interface HardInterface {
	    String  add(String s, int i);
	  }

使用:

代码语言:javascript
复制
	 HardInterface hardInterface = (String s, int i) -> {
	      s = s.substring(0, 1);
	      i = i + 10;
	      return s+i;
	    };
	    hardInterface.add("huyanshi",110);

总结一下: lambda表达式替代了原先的匿名类的作用,将 1.编写接口实现类,实现该接口中的方法。 2.new 一个实现类的实例。 简化为:new 一个接口的实例并将一个方法赋值给它

Lambda结合FunctionalInterface Lib, forEach, stream(),method reference等新特性可以使代码变的更加简洁!


本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • lambda表达式
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档