java中lambda是什么_为什么我们需要Java中的Lambda?

Lambda表达式是可以传递执行的代码块。它是某些编程语言(例如Lisp,Python,Scala等)的通用功能。但是在Java 8之前,我们无法在Java中做到这一点。如果要执行代码块,则需要创建一个对象并将其传递给对象,例如使用策略设计模式。从Java 8开始,lambda表达式使我们能够将功能视为方法参数并传递代码块。Java 8中的Lambda表达式非常强大,因此非常引人注目。在本文中,我将使用一个简单的示例来介绍Java 8中的函数式编程。这是Java 8 lambdas系列的一部分。

e25bead8c91a3c45074fa8ee8ce87a99.png

1. Java 8之前的排序

下面的示例演示如何使用比较器对自定义对象的数组进行排序。

这是需要分类的狗的类。

publicclassDog {

String name;

intheight;

intweight;

publicDog(String n, int s, int w) {

this.name = n;

this.height = s;

this.weight = w;

}

publicString toString() {

returngetName() + ": size=" + getHeight() + " weight=" + getWeight()

+ " \n";

//setters and getters ...}

要对一组狗进行排序,可以使用Arrays.sort(...)。第二个参数是比较器。因此,我们需要定义一个比较器。这是策略模式的典型示例。

importjava.util.Arrays;import java.util.Comparator;import java.util.stream.Stream;

publicclassArraysSort {

publicstaticvoidmain(String[] args) {

Dog d1 = newDog("Max", 2, 50);

Dog d2 = newDog("Rocky", 1, 30);

Dog d3 = newDog("Bear", 3, 40);

Dog[] dogArray = { d1, d2, d3 };

printDogs(dogArray);

Arrays.sort(dogArray, newComparator() {

@Override

publicintcompare(Dog o1, Dog o2) {

returno1.getWeight() - o2.getWeight();

});

publicstaticvoidprintDogs(Dog[] dogs) {

System.out.println("--Dog List--");

for(Dog d : dogs)

System.out.print(d);

System.out.println();

}}

2.使用Java 8 Lambdas表达式排序

在Java 8中,我们可以在一行简单的代码中进行排序,如下所示:

Arrays.sort(dogArray, (Dog m, Dog n) -> m.getWeight() - n.getWeight());

(Dog m, Dog n) -> Integer.compare(m.getWeight(), n.getWeight())是lambda表达式。它被转换为幕后的Comparator对象。现在,让我们简单地将lambda表达式视为一个函数。如何将lambda表达式转换为功能接口的对象是一个更为复杂的故事。

3. Lambda表达式的语法

lambda表达式的语法包括以下内容:

1. 用括号括起来的形式参数的逗号分隔列表。在这种情况下(Dog m, Dog n)

2. 箭头标记 ->

3. 主体,由单个表达式或语句块组成。在这种情况下,它是一个单一表达式-Integer.compare(m.getWeight(), n.getWeight())

我们还可以用其他不同的方式编写lambda表达式。

4.Stream API

当我们说明为什么函数式编程在Java 8中如此强大时,应强调Stream API。Java 8中的流是支持顺序和并行聚合操作的一系列元素。通过使用流,我们可以简单地将代码块传递给流,并将函数应用于流中的每个元素。

为了对上面的dog数组进行排序,我们还可以利用Stream API:

importjava.util.stream.Stream;

publicclassJava8WhyLambda {

// create an array of dogs

// use stream to sort

Stream dogStream = Stream.of(dogArray);

Stream sortedDogStream = dogStream.sorted((Dog m, Dog n) -> Integer.compare(m.getHeight(), n.getHeight()));

sortedDogStream.forEach(d -> System.out.print(d));

最后,开发这么多年我也总结了一套学习Java的资料与面试题,如果你在技术上面想提升自己的话,可以关注我,私信发送领取资料或者在评论区留下自己的联系方式,有时间记得帮我点下转发让跟多的人看到哦。

dbb8179b069e3d0e9b8331ea3dfc6a0c.png

6d980a930552c4308fd85ae1282630d5.png

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值