2016-11-02 51 views
0

作爲一個例子,我有一個地圖,比如說,星期幾和雨量。看起來像:Sorted maplike data structure which allows duplicates and can be stored to file

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

我想在一個有序的方式來組織這樣的:

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

另外,要這個存儲到一個JSON文件,並有另一個程序讀取該JSON回來。這兩個程序可能沒有共享類。因此,如果可能的話,而不是在每一邊編寫自定義代碼,我想嘗試使用Java的標準類來解決這個問題。

這可能嗎?

我能想到的一個解決方案就是編寫2個陣列,第一個陣列是雨,第二個陣列是星期幾的索引,因此看起來像:

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

任何其他的想法任何人都可以想到的? 謝謝,

+0

如何寫「jar」庫類,並在兩個項目模塊之間共享? – degr

回答

0

您可以輕鬆地變換分析您的地圖Java8流。在你的情況,你可以將其轉換爲二維數組,然後將其序列化到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); 
相關問題