在爪哇,java,list,hashmap,java-stream"/>

首页 > 解决方案 > 转换列表到地图在爪哇

问题描述

我想将一个列表转换为一个映射,其中键只是一个计数器,它需要遵守列表的顺序。我目前有这个代码:

private static Map<String, String> convertListToMap(final List<String> list) {
    AtomicInteger counter = new AtomicInteger(0);
    Map<String, String> map = list.stream().collect(Collectors.toMap((c) -> {
        Integer integer = counter.incrementAndGet();
        return integer.toString();
    }, (c) -> c));

    return map;
}

我有两个问题:

  1. 在我桌面上的一个简单控制台应用程序测试中,计数器保留了列表的顺序。我们能否确定在其他任何地方执行时订单将始终保留?
  2. 有没有更好的编码方法?

标签: javalisthashmapjava-stream

解决方案


试试这个方法。

static Map<String, String> convert(List<String> list) {
    return IntStream.range(0, list.size()).boxed()
            .collect(Collectors.toMap(n -> String.valueOf(n+1), list::get,
                    (a, b) -> a, LinkedHashMap::new));
}

笔记:

  • Merge 功能(a, b) -> a对此并没有真正的贡献。
  • 供应商LinkedHashMap::new确保订单被保留。不幸的是,没有 aCollector.toMap允许 aSupplier没有该merge功能。

推荐阅读