当前位置: 首页 > 图灵资讯 > 技术篇> Java 中的流和 Lambda:函数式编程示例指南

Java 中的流和 Lambda:函数式编程示例指南

来源:图灵教育
时间:2024-08-18 23:07:01

java 中的流和 lambda:函数式编程示例指南

函数编程在现代软件开发中得到了广泛的应用。 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:详情请关注图灵教育的其他相关文章!