2016-11-02 5 views
0

例として、曜日と雨量のマップを持っています。 JSONファイルにこれを保存し、別のプログラムが戻って、このJSONを読みしたい重複を許し、ファイルに保存できるソート済みのmaplikeデータ構造

0" -> 3 
0" -> 4 
5" -> 1 
5" -> 5 
7" -> 6 
12" -> 2 
12" -> 7 

また、:私はソートされた方法でこれを整理したい

1 -> 5" 
2 -> 12" 
3 -> 0" 
4 -> 0" 
5 -> 5" 
6 -> 7" 
7 -> 12" 

:のように見えます。 2つのプログラムは、クラスを共有していない可能性があります。だから可能ならば、Javaの標準クラスを使ってこの問題を解決したいと思っています。

これは可能でしょうか? 。私は私の頭の上のものと考えることができ

一つの解決策は、このようにのように見える2つのアレイ、「雨の持つ最初の1、および平日の指標となり秒1を書くことです。

{ 
"inchRain": [ 
    0, 0, 5, 5, 7, 12, 12 
], 
"arrIndex": [ 
    3, 4, 1, 5, 6, 2, 7 
] 
} 

他のアイデアを誰が?のJava8ストリームであなたは簡単にマップをtranformでき

+0

"jar"ライブラリクラスを作成し、2つのプロジェクトモジュール間で共有するのはどうですか? – degr

答えて

0

おかげで、考えることができます。あなたのケースでは、あなたはそれが二次元配列に変換することができ、その後、JSONに、それをシリアル化。受信側で逆変換を行うことができます。必要なJSONライブラリを使用できます

 // sending end 
     Map<Integer, Integer> data = new TreeMap<>(); 
     data.put(1, 5); 
     data.put(2, 12); 
     data.put(3, 0); 
     data.put(4, 0); 
     data.put(5, 5); 
     data.put(6, 7); 
     data.put(7, 12); 

     Integer[][] toSend = data.entrySet().stream() 
       .map(e -> new Integer[] { e.getValue(), e.getKey() }) 
       .sorted((e0, e1) -> e0[0].compareTo(e1[1])) 
       .toArray(Integer[][]::new); 

     String fileContent = new Gson().toJson(toSend); 

     // receiving end 
     Integer[][] received = new Gson().fromJson(fileContent, Integer[][].class); 
     Map<Integer, Integer> dataRead = Arrays.stream(received).collect(Collectors.toMap(e -> e[1], e -> e[0])); 

     assertEquals(data, dataRead); 
関連する問題