java8中的lambda表达式

2018-10-26  本文已影响7人  ZMRWEGo

Java 是面向对象语言,除了原始数据类型(int char byte等)之处,Java 中的所有内容都是一个对象。而在函数式语言中,我们只需要给函数分配变量,并将这个函数作为参数传递给其它函数就可实现特定的功能。JavaScript 就是功能编程语言的典范(闭包)。

Lambda 表达式的加入,使得 Java 拥有了函数式编程的能力。在其它语言中,Lambda 表达式的类型是一个函数;但在 Java 中,Lambda 表达式被表示为对象,因此它们必须绑定到被称为功能接口的特定对象类型。

Lambda 表达式的加入,使得 Java 拥有了函数式编程的能力。在其它语言中,Lambda 表达式的类型是一个函数;但在 Java 中,Lambda 表达式被表示为对象,因此它们必须绑定到被称为功能接口的特定对象类型。
lambda表达式的作用其实就是为了让我们简化代码的编写,可以写出既简洁又清晰的代码。Java从其他语言中吸取优势,在java的1.8版本中引入了lambda表达式,作为java当时(现在已经为java11)的一大新特性,主要应用于java的集合框架中(Java Collections FrameWork),与流API(stream)结合使用。


1. lambda表达式的语法及使用:

Lambda表达式的语法:

#有参
(arg1,arg2...) -> {body}
(type arg1,type arg2...) -> {body}
#无参
() -> {body}

lambda表达式的示例:


(int a,int b) -> {return a+b }
() -> {System.out.println("Hello World")}

2. lambda表达式的map和reduce示例

我们先看一下不使用lambda表达式,使列表各数字加1:

   List<Integer> features = Arrays.asList(1,2,3);
       for (int a : features){
            a = a+1;
           System.out.println(a);
       }

使用lambda表达式:

//map实现各项加1操作并打印出来
List<Integer> features = Arrays.asList(1,2,3);
features.stream().map((n) -> n+1).forEach(System.out::println);
//reduce实现求和操作
int sum = features.stream().reduce((s,a) -> s+a).get();

在上个例子中,可以看到map将集合类(例如列表)元素进行转换的。还有一个 reduce() 函数可以将所有值合并成一个。Map和Reduce操作是函数式编程的核心操作,因为其功能,reduce 又被称为折叠操作。另外,reduce 并不是一个新的操作,你有可能已经在使用它。SQL中类似 sum()、avg() 或者 count() 的聚集函数,实际上就是 reduce 操作,因为它们接收多个值并返回一个值。流API定义的 reduceh() 函数可以接受lambda表达式,并对所有值进行合并。IntStream这样的类有类似 average()、count()、sum() 的内建方法来做 reduce 操作,也有mapToLong()、mapToDouble() 方法来做转换。这并不会限制你,你可以用内建方法,也可以自己定义。在这个Java 8的Map Reduce示例里,我们首先对所有价格应用 12% 的VAT,然后用 reduce() 方法计算总和。

上一篇下一篇

猜你喜欢

热点阅读