【发布时间】:2025-12-30 21:45:07
【问题描述】:
在处理转换时(例如:将List<People> people 转换为List<Integer> ages,其中People 是一个包含属性age 的类),通常有两种方法(对我来说)这样做:
-
使用java8:
people.stream().map(p -> p.getAge()).collect(toList()); -
或用户 guava2:
Lists2.transform(people, People2AgeTransformer.INSTANCE);其中People2AgeTransformer是一个转换器,它实现了 Function 接口以返回年龄。
最近无意中发现java8和guava可以结合,所以代码可以是:
Lists2.transform(people, p->p.getAge());
这段代码符合并运行良好,没有任何错误,这让我感到困惑。
方法Lists2.transform()要求第二个参数是接口com.google.common.base.Function的实现,而java8 lambda实际上是接口java.util.function.Function的实现。(嗯,他们都声明了一个方法B apply(A input)将A转换为B。 )
我不明白为什么这会起作用,因为它们是不同包的两个不同接口。
【问题讨论】:
标签: java lambda guava java-stream