【问题标题】:How to convert a List<Long> to Map<Long, Long> [duplicate]如何将 List<Long> 转换为 Map<Long, Long> [重复]
【发布时间】: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)));

当我尝试将列表中的单个值映射为映射的键时出现错误。

【问题讨论】:

    标签: java java-8


    【解决方案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));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-31
      • 1970-01-01
      • 2014-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-06
      • 1970-01-01
      相关资源
      最近更新 更多