资讯专栏INFORMATION COLUMN

lambda表达式有参数有返回值

codergarden / 1517人阅读

摘要:的参数和返回值需求使用数组存储多个对象对数组中的对象使用的方法通过年龄进行升序排序下面举例演示接口的使用场景代码,其中的抽象方法定义为当需要对一个对象数组进行排序时,方法需要一个接口实例来指定排序的规则。

3.8 Lambda的参数和返回值
需求:
    使用数组存储多个Person对象
    对数组中的Person对象使用Arrays的sort方法通过年龄进行升序排序

下面举例演示java.util.Comparator接口的使用场景代码,其中的抽象方法定义为:

public abstract int compare(T o1, T o2);

当需要对一个对象数组进行排序时,Arrays.sort方法需要一个Comparator接口实例来指定排序的规则。假设有一个Person类,含有String nameint age两个成员变量:

public class Person { 
    private String name;
    private int age;
    
    // 省略构造器、toString方法与Getter Setter 
}
传统写法

如果使用传统的代码对Person[]数组进行排序,写法如下:

import java.util.Arrays;
import java.util.Comparator;

public class Demo06Comparator {
    public static void main(String[] args) {
          // 本来年龄乱序的对象数组
        Person[] array = {
            new Person("古力娜扎", 19),
            new Person("迪丽热巴", 18),
               new Person("马尔扎哈", 20) };

          // 匿名内部类
        Comparator comp = new Comparator() {
            @Override
            public int compare(Person o1, Person o2) {
                return o1.getAge() - o2.getAge();
            }
        };
        Arrays.sort(array, comp); // 第二个参数为排序规则,即Comparator接口实例

        for (Person person : array) {
            System.out.println(person);
        }
    }
}

这种做法在面向对象的思想中,似乎也是“理所当然”的。其中Comparator接口的实例(使用了匿名内部类)代表了“按照年龄从小到大”的排序规则。

代码分析

下面我们来搞清楚上述代码真正要做什么事情。

为了排序,Arrays.sort方法需要排序规则,即Comparator接口的实例,抽象方法compare是关键;

为了指定compare的方法体,不得不需要Comparator接口的实现类;

为了省去定义一个ComparatorImpl实现类的麻烦,不得不使用匿名内部类;

必须覆盖重写抽象compare方法,所以方法名称、方法参数、方法返回值不得不再写一遍,且不能写错;

实际上,只有参数和方法体才是关键

Lambda写法
import java.util.Arrays;

public class Demo07ComparatorLambda {
    public static void main(String[] args) {
        Person[] array = {
              new Person("古力娜扎", 19),
              new Person("迪丽热巴", 18),
              new Person("马尔扎哈", 20) };

        Arrays.sort(array, (Person a, Person b) -> {
              return a.getAge() - b.getAge();
        });

        for (Person person : array) {
            System.out.println(person);
        }
    }
}

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/75993.html

相关文章

  • 乐字节-Java8核心特性实战之Lambda达式

    摘要:使用表达式,使得应用变得简洁而紧凑。很多语言等从设计之初就支持表达式。表达式的参数与函数式接口内方法的参数,返回值类型相互对应。更多教程和资料请上腾讯课堂乐字节 showImg(https://segmentfault.com/img/bVbtotg?w=935&h=345); Java8 引入Lambda表达式,允许开发者将函数当成参数传递给某个方法,或者把代码本身当作数据进行处理。...

    Karuru 评论0 收藏0
  • 「Java 8 函数式编程」读书笔记——lambda达式

    摘要:本文是函数式编程第二章的读书笔记。的语法简化了使用匿名内部类时的模板代码,让程序员专注于编写想要执行的行为,也让代码更加简洁易读。中最重要的函数接口类型推断为新成员表达式提供了类型推断的支持,在不需要声明参数类型的表达式中表现的有为明显。 本文是「Java 8 函数式编程」第二章的读书笔记。 Lambda引入的变化 Lambda表达式,是一种紧凑的、传递行为的方式,从编程思想上来讲,...

    lx1036 评论0 收藏0
  • 乐字节-Java8新特性-Lambda达式

    摘要:很多语言等从设计之初就支持表达式。注意此时外部局部变量将自动变为作为方法返回值例子返回判断字符串是否为空判断字符串是否为空今天关于新特性表达式就讲到这里了,接下来我会继续讲述新特性之函数式接口。 上一篇文章我们了解了Java8新特性-接口默认方法,接下来我们聊一聊Java8新特性之Lambda表达式。 Lambda表达式(也称为闭包),它允许我们将函数当成参数传递给某个方法,或者把代码...

    gggggggbong 评论0 收藏0
  • Lambda达式参数返回的练习

    摘要:表达式有参数有返回值的练习需求给定一个计算器接口,内含抽象方法可以将两个数字相加得到和值使用的标准格式调用方法,完成和的相加计算调用方法方法的参数是一个接口可以使用匿名内部类使用表达式简化匿名内部类的书写优化省略定义一个方法参数传递两个 package com.itheima.demo06.Lambda; /* Lambda表达式有参数有返回值的练习 需求: 给定一个计算器Ca...

    nodejh 评论0 收藏0
  • Java8特性① Lambda 达式

    摘要:上下文比如接受它传递的方法的参数,或接受它的值的局部变量中表达式需要的类型称为目标类型。但局部变量必须显式声明为,或事实上是。换句话说,表达式只能捕获指派给它们的局部变量一次。注捕获实例变量可以被看作捕获最终局部变量。 简介 概念 Lambda 表达式可以理解为简洁地表示可传递的匿名函数的一种方式:它没有名称,但它有参数列表、函数主体、返回类型,可能还有一个可以抛出的异常列表。 匿名...

    vpants 评论0 收藏0
  • JAVA Lambda达式

    摘要:语言是强类型面向对象的语言,所以必须提供一种数据类型作为表达式的返回值类型符合中函数格式的定义符合面向对象规则,所以最终表达式要有一个映射成对象的过程。定一个函数式接口我们在接口里定义了一个没有参数返回值的抽象方法。 在JAVA中,Lambda 表达式(Lambda expression)是一个抽象方法的实现。这个抽象方法必须是在接口中声明的,而且实现类只需要实现这一个抽象方法,我们称...

    Cheng_Gang 评论0 收藏0

发表评论

0条评论

codergarden

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<