知りたいこと
JavaでMap<Integer, Map<Integer, List<Data>>>からMap<Integer, Map<Integer, Data[]>>に変換したい。
Listが配列に変わるだけで要素自体は同じ。Dataの部分は何でもよいが適当なクラス。
自分でも変換すること自体はできているが、streamAPIを駆使するなどしてより短く簡潔に記述できる良いやり方があれば知りたい。
自分が書いたコード
Java
1 static Map<Integer, Map<Integer, Data[]>> toArrayMap( 2 Map<Integer, Map<Integer, List<Data>>> listMap) { 3 4 Map<Integer, Map<Integer, Data[]>> arrayMap = new HashMap<>(); 5 6 listMap.entrySet().forEach(e1 -> { 7 Map<Integer, Data[]> innerMap = new HashMap<>(); 8 e1.getValue().entrySet().forEach(e2 -> { 9 innerMap.put(e2.getKey(), e2.getValue().toArray(new Data[e2.getValue().size()])); 10 }); 11 arrayMap.put(e1.getKey(), innerMap); 12 }); 13 14 return arrayMap; 15 16 }
###補足情報
JDKバージョン:jdk-8u202-windows-x64
質問をするまでの経緯・背景(追記)
(情報追加依頼により追記)
・なぜ変換しようとしているのか?
・元々Map<Integer, Map<Integer, Data[]>>で持っておくことができない理由はあるのか?
に対する補足説明です。
以下のような流れで生じた質問であり、
アプリケーション上、元々Map<Integer, Map<Integer, Data[]>>で持っておくことができない理由や、
変換をしなければいけない理由があるわけではありません。
既存プログラムのデータの持ち方を変えた場合に、処理速度やメモリ使用量がどのように変わるのかを調査したかった。
↓
Listか配列かでどのように変化するかを確認する際に、
JavaでMap<Integer, Map<Integer, List<Data>>>⇒Map<Integer, Map<Integer, Data[]>>という変換を「実験として」行ってみる必要があった。
↓
そのときに、自分では短い記述では書けず、「こんなにゴリゴリ書かないといけないのかな~?」という疑問が生まれた。
↓
自分ではこの程度しか書けないけど、できる人はもっとスマート、エレガントに書けるのかもしれない。
ライブラリを使用する際などに、APIに合わせた変換をする必要は今後もあるかも知れないし、そういう知識は他の人にとっても有益かもしれない。
それだったら質問してみよう。
回答1件
あなたの回答
tips
プレビュー