工作中遇到一个很奇怪的传参问题。之前.net使用的是一个List列表,列表中有几个重复的参数。列表中使用的model类是KeyValue。
我使用java模仿其写法,传递List和KeyValue。对方提示参数格式不对。我使用java中的Map封装参数。因为Map中的Key不能重复所以查询到的信息只是所需要的信息中的一条。
.net示例代码:(只是起到一个示意作用)
public struct KeyValue<TK, TV> {public TK Key { get; } public TV Value { get; } }
参数示例:
List<KeyValue<String, String>> pams = new List<KeyValue<String, String>>(); pams.Add(new KeyValue<String, String>("param1", param1)); pams.Add(new KeyValue<String, String>("param2", param2)); foreach (String param3 in Param3List.Split(new[] { ';' })){ pams.Add(new KeyValue<String, String>("param3", param3)); }
解决方法:
使用java中的 IdentityHashMap 该Map继承了AbstractMap 实现了Map接口。
最重要IdentityHashMap中的key比较使用等是地址比较 即使用了“==”进行比较。
示例代码:
IdentityHashMap<String, String> pams = new IdentityHashMap<>(); pams.put("param1", param1); pams.put("param2", param2); for(String param3: Param3List.split(";")) { if (StringUtils.isNotBlank(param3)){ pams.put(new String("param3"), param3); } }
本文来自博客园,作者:Raiden_xin,转载请注明原文链接:https://www.cnblogs.com/Raiden-xin/p/11981250.html