C#のコードをJavaに移植する必要があって調べてたんですが。
ここまで同等に書けるのかと驚きました。
Java 8のStream APIでLinq的なことが可能になっていたようです。
comparing()内でキャストしてるのだけが少し格好悪いですが。
C#
using System.Collections.Generic;
using System.Linq;
if (dictionary.Count > 0)
{
firstKey = dictionary
.Where(keyValuePair => keyValuePair.Value.isA())
.OrderBy(keyValuePair => keyValuePair.Value.getB())
.ThenBy(keyValuePair => keyValuePair.Value.getC())
.First().Key;
}
Java
import java.util.Comparator;
import java.util.HashMap;
import java.util.Map;
import java.util.stream.Collectors;
if (hashMap.size() > 0) {
firstKey = hashMap.entrySet().stream()
.filter(entry -> entry.getValue().isA())
.sorted(
Comparator.comparing(entry -> ((Map.Entry<TKey, TValue>)entry).getValue().getB())
.thenComparing(entry -> ((Map.Entry<TKey, TValue>)entry).getValue().getC())
).collect(Collectors.toList()).get(0).getKey();
}





0 件のコメント: