如何在 Java 中对 Map<Object> 中的 List<String, Object> 进行排序?

问题描述 投票:0回答:0

我有两张地图,

Map<String,Object>
看起来像:

Map<String, Object> map1 = {
    taxRate={rateType=EXCLUSIVE, rate=0.07}, 
    taxAmount={currencyCode=USD, amount=7.0},
    jurisdictionTaxes=[{jurisdictionLevel=State, taxAmount={currencyCode=USD, amount=null}, taxRate={rateType=EXCLUSIVE, rate=null}, displayName=, jurisdictionName=, responsiblePartyReason=}, {jurisdictionLevel=County, taxAmount={currencyCode=USD, amount=null}, taxRate={rateType=EXCLUSIVE, rate=null}, displayName=, jurisdictionName=, responsiblePartyReason=}, {jurisdictionLevel=City, taxAmount={currencyCode=USD, amount=null}, taxRate={rateType=EXCLUSIVE, rate=null}, displayName=, jurisdictionName=, responsiblePartyReason=}, {jurisdictionLevel=District, taxAmount={currencyCode=USD, amount=null}, taxRate={rateType=EXCLUSIVE, rate=null}, displayName=, jurisdictionName=, responsiblePartyReason=}],
    withholdingJurisdictionTaxes=[]
}

Map<String, Object> map2 = {
    taxRate={rateType=EXCLUSIVE, rate=0.07}, 
    taxAmount={currencyCode=USD, amount=7.0},
    jurisdictionTaxes=[{jurisdictionLevel=State, taxAmount={currencyCode=USD, amount=null}, taxRate={rateType=EXCLUSIVE, rate=null}, displayName=, jurisdictionName=, responsiblePartyReason=}, {jurisdictionLevel=County, taxAmount={currencyCode=USD, amount=null}, taxRate={rateType=EXCLUSIVE, rate=null}, displayName=, jurisdictionName=, responsiblePartyReason=}, {jurisdictionLevel=City, taxAmount={currencyCode=USD, amount=null}, taxRate={rateType=EXCLUSIVE, rate=null}, displayName=, jurisdictionName=, responsiblePartyReason=}, {jurisdictionLevel=District, taxAmount={currencyCode=USD, amount=null}, taxRate={rateType=EXCLUSIVE, rate=null}, displayName=, jurisdictionName=, responsiblePartyReason=}],
    withholdingJurisdictionTaxes=[]
}

我正在比较这两个地图使用

  Map<String, Object> flatMap1 = FlatMapUtil.flatten(map1);
  Map<String, Object> flatMap2 = FlatMapUtil.flatten(map2);
  MapDifference<String, Object> difference = Maps.difference(flatMap1, flatMap2);

但是,如果您查看地图中的第二个键值,它是一个对象列表。计算差异时顺序很重要。所以我需要在找到 Map.difference 之前对该特定列表进行排序。

你能帮我理解如何对这个列表进行排序吗?

我试过以下方法:

1. Collections.sort(Arrays.asList(leftMap.get("jurisdictionTaxes")));

Error: Required type: List <T>
Provided: List <Object>

2. Arrays.asList(leftMap.get("jurisdictionTaxes")).sort((s1, s2) -> s1.get("jurisdictionLevel") - s2.get("jurisdictionLevel"));

Error: Cannot resolve method 'get' in 'Object'
 public static <K, V> MapDifference<K, V> difference(Map<? extends K, ? extends V> left, Map<? extends K, ? extends V> right) {
        if (left instanceof SortedMap) {
            SortedMap<K, ? extends V> sortedLeft = (SortedMap)left;
            return difference(sortedLeft, right);
        } else {
            return difference(left, right, Equivalence.equals());
        }
    }
java list sorting comparator
© www.soinside.com 2019 - 2024. All rights reserved.