在 Java 中将 List<String> 转换为 Map<String, String>

Rom*_*nov 2 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;
}
Run Code Online (Sandbox Code Playgroud)

我有两个问题:

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

WJS*_*WJS 5

试试这个方法。

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));
}
Run Code Online (Sandbox Code Playgroud)

笔记:

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