6

以下のコード スニペットに従うのに問題があります。

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;
        }
    }));

私はコードの結果が何であるかを知っており、単体テストでは正しいですが、グアバや、この実装がどのように/なぜ機能するのかについてはあまり詳しくありません。また、現在、リストの「価格」にも null 値がある場合、安全ではないように見えますか? だから私が求めているもの:

  1. コードの動作に関する一般的な説明。
  2. 現在nullセーフですか?そうでない場合、どのようにしてそれを作ることができますか?
4

2 に答える 2

6

元の 0.88 * である Double の新しいリストを作成します。

コンストラクトは次のとおりです。

匿名の内部クラス

これは、Java でコールバック / クロージャが時々行われる方法です。これに関するJava チュートリアルも参照してください。

new Function<Double, Double>() {
    public Double apply(final Double from) {
        return from *.88;
    }
}

上記の関数を使用したコールバック

Iterables.transform(prices, *func*)

結果を ArrayList に変換する

上記の結果は であるIterableため、リストに格納する必要があります。Lists.newArrayList と newArrayListも参照してください

Lists.newArrayList( ... )
于 2013-07-10T03:51:28.280 に答える