奇怪的看起来番石榴代码

Joe*_*uck 6 java guava

我无法访问以下代码段:

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;
        }
    }));
Run Code Online (Sandbox Code Playgroud)

我知道代码的结果是什么,并且它在单元测试中是正确的,但我不太熟悉番石榴或者这个实现如何/为什么有效.目前,如果列表'价格'中存在空值,它似乎也不安全吗?所以我追求的是:

  1. 关于代码如何工作的一般解释.
  2. 它目前是否安全?如果不是它怎么能成为?

Ond*_*žka 6

它创建了一个新的双打列表,原始值为0.88*.

结构是:

匿名内部阶级

这是一种有时在Java中完成回调/闭包的方法.另见Java教程.

new Function<Double, Double>() {
    public Double apply(final Double from) {
        return from *.88;
    }
}
Run Code Online (Sandbox Code Playgroud)

使用上述函数回调

Iterables.transform(prices, *func*)
Run Code Online (Sandbox Code Playgroud)

将结果转换为ArrayList

以上结果是Iterable,所以需要将其存储到列表中.另请参见Lists.newArrayList与新ArrayList

Lists.newArrayList( ... )
Run Code Online (Sandbox Code Playgroud)