を使用して、2つのハッシュマップの間で動作を実行する私は、対応するキーの各対について、すなわちSTREAMのAPI
Map<String,Double>
、
Map<Integer, Map<String,Double>> MAP_1
Map<Integer, Map<String,Double>> MAP_2
は、内側が内側マップとするフォームに2つのハッシュマップを持っています2つの内部マップ間の演算(例えば、減算)を実行したい。次に、この操作は、内側のマップの2つの対応するキーの間で実行される必要があります。 は、結果のマップは
Map<Integer,List<Double> RESULT
サンプルマップは、外側のマップについては、だから、
MAP_1
------------------------------
| | 2016-10-02 10.0 |
| ID1 | 2016-10-03 20.0 |
| | 2016-10-04 30.0 |
------------------------------
| | 2016-10-02 1.00 |
| ID2 | 2016-10-03 2.00 |
| | 2016-10-04 3.00 |
------------------------------
MAP_2
------------------------------
| | 2016-10-02 2.00 |
| ID1 | 2016-10-03 3.00 |
| | |
------------------------------
| | 2016-10-02 1.00 |
| ID3 | 2016-10-03 2.00 |
| | 2016-10-04 3.00 |
------------------------------
RESULT
---------------
| | 8.00 |
| ID1 | 17.0 |
| | |
---------------
あるべきである、唯一のID1を考慮しなければなりません。操作には内部(共通)キー '2016-10-02'と '2016-10-03'が必要です。
ここに私の現在のコード
Set<Integer> common_keys = new LinkedHashSet<Integer>(map1.keySet());
common_keys.retainAll(map2.keySet());
System.out.println("Common keys: "+common_keys.toString());
map1.forEach((k,v) -> {
Map<String,Double> submap_1 = new LinkedHashMap<String,Double>(v);
Map<String,Double> submap_2 = new LinkedHashMap<String,Double>(map2.get(k));
Set<String> commons = new LinkedHashSet<String>(submap_1.keySet());
commons.retainAll(submap_2.keySet());
System.out.println(k+" : common days: "+commons);
List<Double> val1 = submap_1.keySet()
.stream()
.filter(c -> commons.contains(c))
.map(c -> submap_1.get(c))
.collect(Collectors.toList());
List<Double> val2 = submap_2.keySet()
.stream()
.filter(c -> commons.contains(c))
.map(c -> submap_2.get(c))
.collect(Collectors.toList());
List<Double> ABS = IntStream.range(0, val1.size())
.mapToObj(i -> val1.get(i) - val2.get(i))
.collect(Collectors.toList());
diff_abs.put(k, ABS);
});
はJAVA 8' STREAMのAPIを使用することにより、これを行うためのシンプルかつスマートな方法はありますか?
事前
なぜこのストリームAPIを使用したいですか?従来のコードが機能する場合は、従来のコードを使用してください。 – fge
私はすでに自分のコードでストリームAPIを使用しています。私はそれが同じ結果を達成するためのよりコンパクトな方法が存在するかどうか疑問に思っていた – Fab