函数编程在现代软件开发中得到了广泛的应用。 Java 它是一种支持面向对象和函数编程的语言 8 流和被引入到每个版本中 lambda。这些功能允许开发人员将函数风格应用于集合,使集合操作更加高效和清洁。
Java 中的流
Java 中间的流量将集合转换为元素流。它们使开发人员能够操作集合执行功能,如映射、过滤和合同。流量最适用于涉及数据转换、聚合或过滤的操作。
使用流的一个例子是按字母顺序对名称列表进行排序。我们可以创建一个名称列表,然后用流量对它们进行排序,如下所示:
List 名称 = Arrays.asList("John", "Mary", "David", "Emily", "Tom");
name.stream().sorted().forEach(System.out::println); //输出:大卫、艾米丽、约翰、玛丽、汤姆
在这里,我们用列表上的stream()方法创建了一个流。然后我们采用sorted()法按自然顺序对流中的元素进行排序。然后我们使用sorted()方法按自然顺序对流中的元素进行排序。最后,使用它 forEach() 方法打印流中的每一个元素。
Java 中的 Lambda
Lambda 用于在 Java 定义一流函数。这些函数可以使用流中的元素并操作它们。 Lambda 它是在类外定义的,可以作为参数传递给函数。
要将 lambda 与流一起使用,我们需要了解函数接口的概念。这些接口只有抽象的方法。 Lambda 表达式可用于为函数接口的抽象方法提供具体的实现。
使用 lambda 对名称列表进行排序
让我们在以上示例的基础上使用它 lambda 名称按降序排序。
List 名称 = Arrays.asList("John", "Mary", "David", "Emily", "Tom");
name.stream().sorted((a, b) -> b.compareTo(a)).forEach(System.out::println)); //输出:汤姆、玛丽、约翰、艾米丽
我们在这里使用它 lambda 表达式作为 Sorted() 方法参数。此 lambda 函数接受两个参数(a 和 b)并根据比较结果进行比较,返回正值、负值或零值。此 lambda 函数接受两个参数(a 和 b)并进行比较,根据比较结果返回正值、负值或零值。这允许我们使用元素上的compareto()方法根据降序对元素进行排序。
将流变回集合
在某些情况下,我们可能希望在执行对流操作后将其转换回集合。我们可以使用collect()方法来做到这一点,它接受collector对象作为参数。
ListfilteredNames=names.stream()
.filter(name -> name.length() > 4) //只保留长度为 > 4 的名称
.collect(Collectors.toList()); //返回过滤后的名称列表
collect() 方法采用 Collector 功能接口类型,并使用它将元素积累到集合中。在上面的例子中,我们使用它 Collectors 类中的 toList() 创建过滤名称列表的方法。
流上的其他操作
除了排序和过滤外,对流还可以执行其他操作,如映射、合同和迭代。这些操作允许我们转换、减少和迭代流中的元素。
对数字流进行映射和减少
假设我们有一个数字列表,我们希望找到所有偶数的总和。我们可以使用map()和reduce()来做到这一点。
List 数字 = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
int sum = Numbers.stream()
.filter(num -> num % 2 == 0) //过滤掉奇数
.map(num -> num * 2) //偶数加倍
.reduce(0, (a, b) -> a + b); ///把所有的数字加在一起
在这里,我们用map()法将流中的偶数加倍,然后用reduce()法将所有数字加在一起。结果是列表中所有偶数的总和。
重用流上的操作
在某些情况下,我们可能需要在多个流上使用相同的功能。为了避免一次又一次地编写相同的代码,我们可以创建一个函数接口,并将其作为参数传输给方法。
我们以姓名列表为例。我们可以创建一个实现Comparator接口的比较器类,并将其作为参数传递给sorted()。
立即学习“Java免费学习笔记(深入);
静态类 LastNameComparator 实现 Comparator {
@覆盖
公共 int 比较(字符串名称1,字符串名称2){
String[] parts1 = name1.split(" ");
String lastName1 = parts1[parts1.length - 1];
String[] parts2 = name2.split(" ");
String Name2last = parts2[parts2.length - 1];
返回Name2last.compareTo(lastName1);
}
}
name.stream().sorted(new LastNameComparator()).forEach(System.out::println); //输出:艾米丽、大卫、约翰、玛丽、汤姆
在这里,我们将 LastNameComparator 将其作为参数传递给排序()的方法,按姓氏对名称进行排序。
结论
Java 中的流和 lambda 集合执行函数操作提供了一种强大而有效的方法。它们使开发人员能够编写干净、简单和可重用的代码。通过理解流和 lambda 对于概念,我们可以提高整体编码技能,编写更高效的代码。
提高 Java 获得最新技能的有效方法是获得最新技能 Java 认证并使用 MyExamCloud 上提供的 1Z0-830 练习测试。
以上是Java 中的流和 Lambda:详情请关注图灵教育的其他相关文章!