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个数组,第一个用“rain”,第二个用作工作日的索引。因此看起来像:
{
"inchRain": [
0, 0, 5, 5, 7, 12, 12
],
"arrIndex": [
3, 4, 1, 5, 6, 2, 7
]
}
任何人都能想到的其他想法? 谢谢,
答案 0 :(得分: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);
答案 1 :(得分:0)
我认为您希望在值而不是键上对地图进行排序。 下面的链接将帮助您制作比较器,根据地图的值对地图进行排序。 http://stackoverflow.com/questions/109383/sort-a-mapkey-value-by-values-java
现在,一旦准备好地图,就可以轻松地在单独的数组中获取键和值。