【发布时间】:2013-07-10 03:46:36
【问题描述】:
我在执行以下代码 sn-p 时遇到问题:
prices = pricesService.getProductsByCategory(category);
List<Double> discountedPrices =
Lists.newArrayList(Iterables.transform(prices, new Function<Double, Double>() {
public Double apply(final Double from) {
return from *.88;
}
}));
我知道代码的结果是什么,并且在单元测试中是正确的,但我不太熟悉番石榴或这个实现如何/为什么工作。此外,如果列表“价格”中存在空值,目前似乎也不安全?所以我追求的是:
- 代码工作原理的一般说明。
- 目前是否为空安全?如果不是,它怎么会变成这样?
【问题讨论】:
-
哪一部分给你带来了麻烦?您是否阅读过
.transform的文档?看起来如果链中没有任何内容过滤掉空值,那么如何使其成为空值安全将是相当明显的,尽管您需要定义在这种情况下您实际希望发生的事情。 -
我想这对我来说有点陌生。将“转换”视为方法名称有点让我头疼。至于 null 部分,我会检查是否 from == null 我猜?不确定函数调用是否有不同之处?
-
transform作为方法名有什么问题? -
当您了解这段代码在做什么时,请务必阅读:code.google.com/p/guava-libraries/wiki/FunctionalExplained(并测试命令式和函数式方法的性能)。
-
“Null safe”是一个具有误导性的术语。另一个短语可能是“不会告诉您代码中可能指示细微错误的空定时炸弹。”