【Java】函数式接口(二)

简介: 本期主要介绍函数式接口

3.4 练习:格式化打印信息


题目

下面的字符串数组当中存有多条信息,请按照格式 “ 姓名: XX 。性别: XX 。 ” 的格式将信息打印出来。要求将打印姓名的动作作为第一个 Consumer 接口的 Lambda 实例,将打印性别的动作作为第二个 Consumer 接口的 Lambda 实例,将两个 Consumer 接口按照顺序 “ 拼接 ” 到一起。

image.png

解答

image.png

3.5 Predicate接口


有时候我们需要对某种类型的数据进行判断,从而得到一个boolean值结果。这时可以使用java.util.function.Predicate 接口。

抽象方法: test

Predicate 接口中包含一个抽象方法: boolean test(T t) 。用于条件判断的场景:

image.png

条件判断的标准是传入的 Lambda 表达式逻辑,只要字符串长度大于 5 则认为很长。

默认方法: and既然是条件判断,就会存在与、或、非三种常见的逻辑关系。其中将两个 Predicate 条件使用 “ 与 ”逻辑连接起来实现 “ 并且 ” 的效果时,可以使用 default 方法 and 。其 JDK 源码为:

image.png

如果要判断一个字符串既要包含大写“H”,又要包含大写“W”,那么:

image.png

默认方法: or与 and 的 “ 与 ” 类似,默认方法 or 实现逻辑关系中的 “ 或 ” 。 JDK 源码为:

image.png

如果希望实现逻辑 “ 字符串包含大写 H 或者包含大写 W” ,那么代码只需要将 “and” 修改为 “or” 名称即可,其他都不变:

image.png

默认方法: negate“ 与 ” 、 “ 或 ” 已经了解了,剩下的 “ 非 ” (取反)也会简单。默认方法 negate 的 JDK 源代码为:

image.png

从实现中很容易看出,它是执行了 test 方法之后,对结果 boolean 值进行 “!” 取反而已。一定要在 test方法调用之前调用 negate 方法,正如 and 和 or 方法一样:

image.png

3.6 练习:集合信息筛选


题目

数组当中有多条 “ 姓名 + 性别 ” 的信息如下,请通过 Predicate 接口的拼装将符合要求的字符串筛选到集合

ArrayList 中,需要同时满足两个条件:

1. 必须为女生;

2. 姓名为 4 个字。

image.png

解答

image.png

3.7 Function接口


java.util.function.Function<T,R> 接口用来根据一个类型的数据得到另一个类型的数据,前者称为前置条件,后者称为后置条件。

抽象方法: applyFunction 接口中最主要的抽象方法为: R apply(T t) ,根据类型 T 的参数获取类型 R 的结果。

使用的场景例如:将 String 类型转换为 Integer 类型。

image.png

当然,最好是通过方法引用的写法。

默认方法: andThen

Function 接口中有一个默认的 andThen 方法,用来进行组合操作。 JDK 源代码如:

image.png

该方法同样用于“先做什么,再做什么的场景,和 Consumer 中的 andThen 差不多:

image.png

第一个操作是将字符串解析成为 int 数字,第二个操作是乘以 10 。两个操作通过 andThen 按照前后顺序组合到了一起。

请注意, Function 的前置条件泛型和后置条件泛型可以相同。

3.8 练习:自定义函数模型拼接


题目

请使用 Function 进行函数模型的拼接,按照顺序需要执行的多个函数操作为:

String str = " 赵丽颖 ,20";

1. 将字符串截取数字年龄部分,得到字符串;

2. 将上一步的字符串转换成为 int 类型的数字;

3. 将上一步的 int 数字累加 100 ,得到结果 int 数字。

解答

image.png

相关文章
|
1月前
|
Java
【Java】一个简单的接口例子(帮助理解接口+多态)
【Java】一个简单的接口例子(帮助理解接口+多态)
17 0
|
1月前
|
Java
JAVA接口
JAVA接口
12 0
|
1天前
|
存储 安全 Java
[Java基础面试题] Map 接口相关
[Java基础面试题] Map 接口相关
|
7天前
|
Java 开发者
探索 Java 的函数式接口和 Lambda 表达式
【4月更文挑战第19天】Java 中的函数式接口和 Lambda 表达式提供了简洁、灵活的编程方式。函数式接口有且仅有一个抽象方法,用于与 Lambda(一种匿名函数语法)配合,简化代码并增强可读性。Lambda 表达式的优点在于其简洁性和灵活性,常用于事件处理、过滤和排序等场景。使用时注意兼容性和变量作用域,它们能提高代码效率和可维护性。
|
8天前
|
Java
Java接口中可以定义哪些方法?
【4月更文挑战第13天】
14 0
Java接口中可以定义哪些方法?
|
9天前
|
设计模式 Java
Java接口与抽象类
Java接口与抽象类
17 0
|
14天前
|
安全 Java 编译器
接口之美,内部之妙:深入解析Java的接口与内部类
接口之美,内部之妙:深入解析Java的接口与内部类
35 0
接口之美,内部之妙:深入解析Java的接口与内部类
|
16天前
|
存储 Java
java接口和内部类
java接口和内部类
|
17天前
|
缓存 安全 Java
Java中函数式接口详解
Java 8引入函数式接口,支持函数式编程。这些接口有单一抽象方法,可与Lambda表达式结合,简化代码。常见函数式接口包括:`Function&lt;T, R&gt;`用于转换操作,`Predicate&lt;T&gt;`用于布尔判断,`Consumer&lt;T&gt;`用于消费输入,`Supplier&lt;T&gt;`用于无参生成结果。开发者也可自定义函数式接口。Lambda表达式使实现接口更简洁。注意异常处理和线程安全。函数式接口广泛应用于集合操作、并行编程和事件处理。提升代码可读性和效率,是现代Java开发的重要工具。
29 0
|
18天前
|
Java 关系型数据库 MySQL
大厂面试题详解:Java抽象类与接口的概念及区别
字节跳动大厂面试题详解:Java抽象类与接口的概念及区别
40 0