前言
很久没有写博客了,从开始实习到现在,每天都有收获,想着要记录下来,可以方便后续我自己的查看在这段实习中的收获有哪些,但是一直没有时间来写,偶尔的空余时间也只是在自己的文档中写了一下,并没有写在博客中;
为什么要写这一篇博客呢?原因很简单,第一是时间空余了下来,第二就是在就看看代码的时候看到前辈有人写过Function,之前没怎么看到过这个,索性就去看一下。
一、Function<T, R>
接口
表示接受一个类型为 T
的输入参数,返回一个类型为 R
的结果。
示例:
Function<PvostInfoEntity, Void> queryFunc = pvostInfoEntity -> {}
在例子中,T
是 PvostInfoEntity
,R
是 Void
,意味着方法会处理一个 PvostInfoEntity
对象,但不会返回任何实际的值。
(一)、使用场景
-
副作用操作
如果你需要对PvostInfoEntity
对象进行操作,而不关心返回值(例如,打印日志、更新状态、执行某些操作),你可以使用Function<PvostInfoEntity, Void>
。这种情况比较少见,通常Consumer<PvostInfoEntity>
更合适。 -
代码风格或接口要求:
在某些情况下,特别是与特定的 API 或库集成时,你可能需要实现Function
接口,即使返回类型是Void
。这通常取决于 API 设计的约定。
(二)、Consumer
的替代
-
Consumer<T>
接口:适用于你不需要返回值的场景。它接受一个参数并执行某些操作,但不返回结果。通常,当你只是想对一个对象执行操作而不关心结果时,Consumer
是更自然的选择:
Consumer<PvostInfoEntity> consumer = pvostInfoEntity -> {
//操作代码
};
//与上面代码作用相同
Function<PvostInfoEntity, Void> queryFunc = pvostInfoEntity -> {
//操作代码
}
二、Stream
流
-
流式处理:
Stream
提供了一种声明式的方式来处理集合。可以用forEach、map
终端操作处理每个元素,类似于Consumer
。 -
例子:
list.stream().forEach(pvostInfoEntity -> {
//操作代码
});
list.stream().map(pvostInfoEntity -> {
//操作代码
});
-
优势:
Stream
提供了更丰富的 API 来进行复杂的集合操作(如fifter、sort、distinct等),而不仅仅是处理每个元素。
三、增强 for 循环
-
传统迭代:增强 for 循环(或称为“for-each”循环)是一种简洁的方式来遍历集合元素。它内部的实现可能使用了迭代器,但代码更为简洁。
-
例子:
for (PvostInfoEntity pvostInfoEntity : list) {
//操作代码
}
-
优势:直接、简单,但不如
Stream
灵活和强大。