Java8之Lambda表达式

前一段事件在做项目的时候,看见项目里的很多地方都采用到了Java 8新特性的Lambda表达式进行编写,说实话,一开始的时候确实很让我觉得难以理解,可能是天生的对于新生的事物有一种莫名的抵触感吧。但是仔细的去了解和学习了一下,发现它并没有什么新的东西,无非是提高了编写代码的效率,当然其中也添加很很多有用的方法,对于开发者来说,确实是福音,我觉得Lambda的本质就是语法糖罢了,通俗的来说就是约定的一种规则吧。

那么我们可以使用Lambda表达来做什么呢?

在这之前我们先看看我们是怎么使用Lambda表达式的:

需要传参数进来的:

(params)->statement;

(params)->expression

(params)->{statement}

什么参数都不传的情况:

()->statement

其实我觉得一般看到这里就知道Lambda是怎么回事了。对的,他就是函数式编程的简写,比如当我们写一个函数的时候:

void show(String name){

 System.out.println(“name=”+name);

}

我们一般都是这样的额,但是当你使用Lambda表达式就可以变成:

(x->System.out.println(“name”+name))

以前很多行的代码就变成了简单的一行。

接着我们再来看看使用Lambda表达式对于匿名内部类的一些处理:

比如用创建一个线程来说:

我们常见的是不是就是这种:

new Thread(new Runnable(){

@Override

public void run(){

system.out.println(“Carina is a good girl”);

}

}).start();

然后我们再来看看使用Lambda表达式的情况下:

 new Thread(x->System.out.println(“LambdaCarina is a good girl”)).start();

Ps:添加监听器的方式也是一样的。

这样一对比是不是就显得简洁的多,是不是感觉棒棒哒,嘻嘻。我感觉我可以省很多的功夫,于是就继续的看下去:(因为项目中用的比较多的情况就是对于集合的一些的应用)

首先我们定义一个集合:

List<String> list = Arrays.toList(“john”,”love”,”her”);

我们一般遍历这个集合使用的是for,或者foreach是把:

for(String s:list){

System.out.println(“s=”+s);

}

for(int i=0;i<list.size();i++){

System.out.println(list[i]);

}

那我们按照惯例来看看使用Lambda表达式的方法来:

List<String> list = Arrays.toList(“john”,”love”,”her”);

list.stream().forEach(x->System.out::println);//x->也可以去掉哦

想不到就是这么简洁,以前几行的,现在一行就可以搞定,我也是觉得醉了,于是我爱上了Lambda表达式的使用。

于是这个时候我就想,难道Lambda表达式就仅仅可以遍历?如果我要改变里面集合的元素呢?我该怎么办?于是我就又去查找资料,发现,如果先要改变里面的元素,我们就只需要添加一个map就可以了:比如:上面的,我想把他的字母都变成大写的,或者添加点东西:

list.stream().map(x->x.toUpperCase()).forEach(System.out::println);

list.stream().map(x-x+” ”+”hehe”).forEach(System.out::println);

有没有感觉很强大?哈哈

了解过hadoop的应该知道里面有map和reduce函数,一个是处理,一个是计算,在Lambda表达式也是同样存在这reduce的,我们可以使用这个进行计算,得到结果。

List<Integer> list =Arrays.toList(100,200,300);

我们要计算这个集合的总和:

List.stream().reduce((sum,x)->sum+x).get();这个就可以了,我觉得用起来真的是很舒服。

 好了,关于Lambda表达式的介绍就到这里了,它还有很多其它很棒的功能,比如去重distinct,比如过滤filter等等,我觉得这些需要自己动手去实践一般会更好,最好是把以前写过的代码拿出来重新写一遍,我觉得就很容易的,不怕笑,我就是这样做的,嘻嘻。

 




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值