【发布时间】:2016-10-14 08:19:39
【问题描述】:
有没有一种优雅的方式来存储apply() 方法的返回值,这样就不必多次调用它了?因为我能想到的唯一方法是创建一个本地映射变量来存储函数-“返回值”对。
@Autowired
private List<Function<String, String>> evaluators;
//...
private String evaluate(String code) {
return evaluators.stream().filter(f -> f.apply(code) != null).findFirst().get().apply(code);
}
【问题讨论】:
-
但是如果你用不同的
code调用方法,你会期待不同的结果,对吧?所以你想要一个代码缓存到应用函数的结果? -
没有内置任何东西。这个概念被称为“记忆化”,所以试着用谷歌搜索一下。一般的方法是用记忆层包装你的 lambda 实例。
-
@Joop Eggen:过度lambda化的典型案例,使用
function::apply将Function转换为Function。除此之外,那篇文章中的“基准”是荒谬的。 -
@Joop Eggen:它没有被称为基准测试,但是在 JVM 中测量相同函数的后续执行时间几乎总是会为第二次执行产生更短的执行时间,无论是否记忆化。所以测量和打印这些时间是没有意义的。
标签: java function lambda java-8