Java 番石榴散列图比较

Java 番石榴散列图比较,java,json,hashmap,gson,guava,Java,Json,Hashmap,Gson,Guava,我在使用番石榴的地图时遇到了一些问题。差异 现在,使用此代码比较来自两个不同JSON的两个HashMap: //Create maps from the given jsons Gson gson = new Gson(); Type type = new TypeToken<Map<String, Object>>(){}.getType(); Map<String, Object> map1 = gson.fromJson(jsonObject1, ty

我在使用番石榴的
地图时遇到了一些问题。差异

现在,使用此代码比较来自两个不同JSON的两个HashMap:

//Create maps from the given jsons
Gson gson = new Gson();
Type type = new TypeToken<Map<String, Object>>(){}.getType();

Map<String, Object> map1 = gson.fromJson(jsonObject1, type);
Map<String, Object> map2 = gson.fromJson(jsonObject2, type);

//Flatten the maps
Map<String, Object> leftFlatMap = FlatMap.flatten(map1);
Map<String, Object> rightFlatMap = FlatMap.flatten(map2);
        
//Check differences between both maps
MapDifference<String, Object> difference = Maps.difference(leftFlatMap, rightFlatMap);
第二个JSON:

{
   "body":[
      {
         "primitive":"VALUE",
         "jsonArray":[
            {  
               "anotherElement":20832841804
            },
            {
               "element":83284180
            }  
         ]
      }
   ]
}
正如您所看到的,元素和另一个元素的值是相同的,但由于它们在数组中以不同的顺序出现,差异显示了一个错误

以前是否有可能对阵列进行排序?还是其他解决方案

提前谢谢

一个可能的解决方案可能是对内部子数组进行排序,以便它会影响反序列化映射(但是,我认为在这种情况下,使用JSON对象制作映射可能不是一个很好的主意,因为反序列化成本和策略不一定代表原始JSON对象)

假设
jsonObject1
jsonObject2
JsonElement
实现,您可以对其子体进行排序

@UtilityClass
公共最终类JsonElements{
公共静态列表asListView(最终JsonArray JsonArray){
返回新的JsonArrayListView(jsonArray);
}

公共静态void sort(final JsonArray JsonArray,final ComparatorWhere is
FlatMap.flatte()
来自何处?如果可以将每个列表映射到一个集合,就可以克服这个问题。我使用FlatMap只是为了让结果更可读,如果不使用它,结果将类似于:
body:([{primitive=VALUE,JsonArray=[{element=8.328418E7},{anotherElement=2.0832841804E10}],{primitive=VALUE,jsonArray=[{anotherElement=2.0832841804E10},{element=8.328418E7}])
和Flatmap:
/body/0/jsonArray/0/element:8.328418E7/body/0/jsonArray/1/anotherElement:2.0832841804E10
谢谢!!我可以使用集合和排序来完成我想要的工作。您的回答非常有用!
{
   "body":[
      {
         "primitive":"VALUE",
         "jsonArray":[
            {  
               "anotherElement":20832841804
            },
            {
               "element":83284180
            }  
         ]
      }
   ]
}