我可以将 Map<String, List<Integer>> 转换为 MultiValueMap<String, Integer>

Roy*_*ger 1 java spring

我正在尝试将地图转换为多值地图,但出现以下编译异常:

Wrong 1st argument type. Found: java.util.Map<java.lang.String,java.util.List<java.lang.String>>, required: org.springframework.util.MultiValueMap<java.lang.String,java.lang.String> less... Inspection info:

这是结构: Map<String, List<String>> tradersTradeMap-> MultiValueMap<String, String>tradersTradeMap

class Trade {

  public String getTraderNameAfterProcesing (MultiValueMap<String, String> 
      tradersTradeMap){
      ..... // SOme code goes here
   }

}

class Customer {

private Trade trade;

public String Method1(){
   Map<String, List<String>> traderTradeMap = new HashMap<>();
   traderTradeMap.put("TraderA", Arrays.asList("SPOT","BLOCK","FORWARD"));
   traderTradeMap.put("TraderB", Arrays.asList("SPOT","BLOCK"));

   trade = new Trade();
   trade.getTraderNameAfterProcesing(traderTradeMap); // This line is giving exception 

}

}
Run Code Online (Sandbox Code Playgroud)

有什么简单的方法可以做到吗?

小智 9

是的,Spring 以 的形式提供了一个方便的包装器CollectionUtils.toMultiValueMap(),它保留了原来Map使用的。


Pow*_*ord 6

如果你不关心MultiValueMap你使用哪种类型,最简单的方法是使用LinkedMultiValueMap复制构造函数,它需要一个Map<K, List<V>>

您的示例中的一个问题是您试图提供原始地图和MultiValueMap相同的变量名称。因此,如果您改为执行以下操作:

MultiValueMap<String, String> TradersTradeMVMap = new LinkedMultiValueMap<>(TradersTradeMap);
Run Code Online (Sandbox Code Playgroud)