如何将 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&lt;Long,Long&gt;

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> [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何将mapobject转换成string

将一个原始long数组转换为Longs列表

如何将 List<string> 转换为 List<myEnumType>?

如何将 List<Object> 转换为 List<MyClass>

如何将 List<int> 转换为 string[]?

List<Map<String, Object>>中就一个值,怎么取出来转换成long