程序员学会了这套Lambda用法,何尝还会一筹莫展?

集合和方法引用的Lambda用法

这篇文章里我们来看看如何在Java集合类以及方法引用中使用lambda表达式,以增加代码重用并提高工作效率。

将Lambda表达式与集合类一起使用

从Java 8开始,Java支持用于处理集合元素的流功能。 Stream API是Java Collections Framework引入的新功能,用于支持和利用lambda表达式的函数式编程风格。 java.util.function包定义了集合类使用的几个功能接口,可以很容易地用于日常编程。在集合上获取的集合类和流引用公开了接受lambda表达式以对集合执行操作的方法。

集合类公开诸如removeIf(谓词条件),anyMatch(谓词条件),allMatch(谓词条件)之类的方法,以及支持处理集合数据的lambda表达式的其他方法。

下面的代码(清单1)定义了FruitList类,用于保存集合并对集合类执行操作。

现在我们来看看如何向集合添加元素并使用lambda表达式来验证集合是否包含特定值或整个集合是否包含相同的值。 在清单1中,方法fruitExists(Predicate <String> fruitExists)和方法sameFruits(Predicate <String> sameFruits)获取对集合的流引用。

下面的代码(清单2)演示了对集合执行所需操作的客户端代码

清单2中的代码将数据添加到集合,定义谓词,并将谓词传递给接受lambda表达式的方法。 下面显示的输出是通过执行清单2中的
CollectionElementCheckDemo获得的。要评估和满足的条件由客户端代码传递,而通过列表的每个元素并评估元素由相应的列表实现处理。

下面的代码(清单3)中的客户端代码演示了使用lambda表达式从集合中删除元素的代码实现。 删除后,使用Stream API的forEach方法打印集合数据。 为了打印集合的每个元素,我们使用
java.util.function.Consumer功能接口。 使用Consumer API定义的lambda表达式逐个获取对每个元素的集合数据的引用,因此我们可以对集合数据执行所需的操作。 Predicate API有助于评估条件表达式并返回布尔结果。

输出结果将是:

下面的代码(清单4)中的代码演示了
java.util.functional.Consumer接口的另一种用法,即lambda表达式。 定义的表达式会评估每个元素以检查特定的国家/地区类型,然后使用适当的国家/地区特定问候语。 此实现显示Consumer API可用于复杂操作,而不仅仅是将元素打印到输出控制台。

输出结果将是:

使用Lambda表达式和方法引用

我们已经知道,lambda表达式是表达匿名方法实现的一种方式。方法引用是Java 8中引入的一个新特性,它们补充了lambda表达式。方法引用定义了用于调用已定义方法的语法。调用方法是构建lambda表达式(调用匿名方法)和方法引用(调用命名方法)的共同基础,使方法引用替代接受lambda表达式的方法,例如,接受实例的方法功能界面。

清单5中的代码演示了使用方法引用作为lambda表达式的替代方法,并强调了可以调用接受函数接口作为参数的方法的不同方法。

清单5中的代码显示方法引用允许以干净的方式重用代码。

在清单5中,有两个方法引用案例:一个调用fruitComparator :: compare,另一个调用nonFuntionalComparator :: compare2。虽然调用了不同对象的不同方法,但结果是相同的。

结论

在本文中,我们看到,lambda表达式可以与现有Java API一起使用以编写更好的代码。lambda同时还可以接收方法引用接口被接受为参数。我们可以利用这些技术来重用代码并提高编程效率。

转发+转发+转发+关注公众号 【阿虎讲Java】 即可免费领取JAVA资料+面试文档!!!!!

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值