摘要:的参数和返回值需求使用数组存储多个对象对数组中的对象使用的方法通过年龄进行升序排序下面举例演示接口的使用场景代码,其中的抽象方法定义为当需要对一个对象数组进行排序时,方法需要一个接口实例来指定排序的规则。
3.8 Lambda的参数和返回值
需求: 使用数组存储多个Person对象 对数组中的Person对象使用Arrays的sort方法通过年龄进行升序排序
下面举例演示java.util.Comparator
public abstract int compare(T o1, T o2);
当需要对一个对象数组进行排序时,Arrays.sort方法需要一个Comparator接口实例来指定排序的规则。假设有一个Person类,含有String name和int 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) }; // 匿名内部类 Comparatorcomp = 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
摘要:使用表达式,使得应用变得简洁而紧凑。很多语言等从设计之初就支持表达式。表达式的参数与函数式接口内方法的参数,返回值类型相互对应。更多教程和资料请上腾讯课堂乐字节 showImg(https://segmentfault.com/img/bVbtotg?w=935&h=345); Java8 引入Lambda表达式,允许开发者将函数当成参数传递给某个方法,或者把代码本身当作数据进行处理。...
摘要:本文是函数式编程第二章的读书笔记。的语法简化了使用匿名内部类时的模板代码,让程序员专注于编写想要执行的行为,也让代码更加简洁易读。中最重要的函数接口类型推断为新成员表达式提供了类型推断的支持,在不需要声明参数类型的表达式中表现的有为明显。 本文是「Java 8 函数式编程」第二章的读书笔记。 Lambda引入的变化 Lambda表达式,是一种紧凑的、传递行为的方式,从编程思想上来讲,...
摘要:很多语言等从设计之初就支持表达式。注意此时外部局部变量将自动变为作为方法返回值例子返回判断字符串是否为空判断字符串是否为空今天关于新特性表达式就讲到这里了,接下来我会继续讲述新特性之函数式接口。 上一篇文章我们了解了Java8新特性-接口默认方法,接下来我们聊一聊Java8新特性之Lambda表达式。 Lambda表达式(也称为闭包),它允许我们将函数当成参数传递给某个方法,或者把代码...
摘要:表达式有参数有返回值的练习需求给定一个计算器接口,内含抽象方法可以将两个数字相加得到和值使用的标准格式调用方法,完成和的相加计算调用方法方法的参数是一个接口可以使用匿名内部类使用表达式简化匿名内部类的书写优化省略定义一个方法参数传递两个 package com.itheima.demo06.Lambda; /* Lambda表达式有参数有返回值的练习 需求: 给定一个计算器Ca...
摘要:上下文比如接受它传递的方法的参数,或接受它的值的局部变量中表达式需要的类型称为目标类型。但局部变量必须显式声明为,或事实上是。换句话说,表达式只能捕获指派给它们的局部变量一次。注捕获实例变量可以被看作捕获最终局部变量。 简介 概念 Lambda 表达式可以理解为简洁地表示可传递的匿名函数的一种方式:它没有名称,但它有参数列表、函数主体、返回类型,可能还有一个可以抛出的异常列表。 匿名...
摘要:语言是强类型面向对象的语言,所以必须提供一种数据类型作为表达式的返回值类型符合中函数格式的定义符合面向对象规则,所以最终表达式要有一个映射成对象的过程。定一个函数式接口我们在接口里定义了一个没有参数返回值的抽象方法。 在JAVA中,Lambda 表达式(Lambda expression)是一个抽象方法的实现。这个抽象方法必须是在接口中声明的,而且实现类只需要实现这一个抽象方法,我们称...
阅读 1299·2019-08-30 15:44
阅读 1351·2019-08-29 18:42
阅读 402·2019-08-29 13:59
阅读 726·2019-08-28 17:58
阅读 2747·2019-08-26 12:02
阅读 2379·2019-08-23 18:40
阅读 2370·2019-08-23 18:13
阅读 3024·2019-08-23 16:27