如何将 List<Long> 转换为 Map<Long, Long> [重复]
Posted
技术标签:
【中文标题】如何将 List<Long> 转换为 Map<Long, Long> [重复]【英文标题】:How to convert a List<Long> to Map<Long, Long> [duplicate] 【发布时间】:2018-04-07 18:40:01 【问题描述】:我有以下代码,想使用 java 8 将Long
的列表转换为Map<Long,Long>
。
Long globalVal= 10;
List<Long> queryLongs = Arrays.asList(600L,700L,800L);
Map<Long, Long> map = queryLongs.stream().collect(Collectors.toMap(i->i, globalVal)));
当我尝试将列表中的单个值映射为映射的键时出现错误。
【问题讨论】:
【参考方案1】:toMap
的第二个参数也是Function
,所以不能只传globalVal
。
Map<Long, Long> map = queryLongs.stream()
.collect(Collectors.toMap(Function.identity(),
i->globalVal));
【讨论】:
我得到的问题是我的变量 globalVal 应该是最终的或有效的最终。有没有办法克服这个问题? @Erica 你在哪里改变它的价值吗?如果是,则不能在 lambda 表达式中使用。如果你不是,它实际上是最终的,一切都应该没问题。 @Erica,只需将其复制到一个临时的final
变量中并在 lambda 中使用该变量
感谢@Didier 的反馈。将变量的副本保存到最终版本中会有所帮助。
感谢@Eran 的解决方案【参考方案2】:
这是一种不使用流的方法(但仍使用 Java 8 功能):
Map<Long, Long> map = new HashMap<>();
queryLongs.forEach(i -> map.put(i, globalVal));
【讨论】:
以上是关于如何将 List<Long> 转换为 Map<Long, Long> [重复]的主要内容,如果未能解决你的问题,请参考以下文章
如何将 List<string> 转换为 List<myEnumType>?