我有一个Map< String,String> String键只是数字值,如“123”等.我正在获取数值,因为这些值来自我的JSF组件中的UI.我不想更改UI组件的合同.
现在我想创建一个Map< Long,String>基于上面的Map,我在Maps类中看到了一些变换方法,但都是关注转换值而不是键.
有没有更好的方法来转换Map< String,String> to Map< Long,String> ?
解决方法:
更新Java 8
您可以使用流来执行此操作:
Map<Long, String> newMap = oldMap.entrySet().stream()
.collect(Collectors.toMap(e -> Long.parseLong(e.getKey()), Map.Entry::getValue));
这假设所有键都是Longs的有效字符串表示.此外,转换时可能会发生冲突;例如,“0”和“00”都映射到0L.
我认为你必须迭代地图:
Map<Long, String> newMap = new HashMap<Long, String>();
for(Map.Entry<String, String> entry : map.entrySet()) {
newMap.put(Long.parseLong(entry.getKey()), entry.getValue());
}
此代码假定您已清理了map中的所有值(因此没有无效的长值).
我希望有更好的解决方案.
编辑
我在Commons Collection-Utils中遇到了CollectionUtils#transformedCollection(Collection, Transformer)
方法,看起来它可能会做你想要的.从头开始,它只适用于实现Collection的类.
标签:java,guava 来源: https://codeday.me/bug/20190929/1830098.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。