2016-11-02 2 views
0

예를 들어, 요일과 비의 양을 나타내는지도가 있습니다.중복을 허용하고 파일에 저장할 수있는 정렬 된 maplike 데이터 구조

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을 읽게하고 싶다. 2 개의 프로그램에는 공유 클래스가 없을 수 있습니다. 따라서 각면에 사용자 정의 코드를 작성하는 것이 아니라 가능한 경우 Java의 표준 클래스를 사용하여이 문제를 해결하려고합니다.

이 작업을 수행 할 수 있습니까?

내가 생각할 수있는 한 가지 해결책은 "비가 내린 첫 번째 배열과 평일의 인덱스가 될 두 번째 배열을 작성하는 것입니다. 따라서 다음과 같이 보입니다 :

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

다른 아이디어 누구?의 Java8 스트림으로 쉽게지도를 tranform 수

+0

"jar"라이브러리 클래스를 작성하고 두 프로젝트 모듈간에 공유하는 것이 어떻습니까? – degr

답변

0

감사를 생각할 수 있습니다. 귀하의 경우에 당신은 그것을 2 차원 배열로 변환 할 수 다음 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); 
관련 문제