String transform の利用

以前、あまり思いつかずこのように書きました。
oboe2uran.hatenablog.com

2つの連携した Map から、値を取得する時に使えますね。

例)以下のような2つの Map

Map<String, String>  amap = Map.of("Orange", "i001", "Lemon", "i002", "Apple", "i003", "banana", "i004");
Map<String, Integer> bmap = Map.of("i000", 100, "i001", 150,  "i002", 90,  "i003", 140, "i004", 210);

amap の key → value 取得値をキーに bmap から value を取得
transform が使えない時は、

String name = "Apple";
int price = bmap.get(amap.get(name));

とする必要がありました。

Java12 からの transform を使えば、

String name = "Apple";
int price = name.transform(amap::get).transform(bmap::get);

と読み易い方法にできます。

amap に存在しないデフォルトを考慮するなら、

int price = name.transform(e->amap.getOrDefault(e, "i000")).transform(bmap::get);

とすることができます。