首页 > 解决方案 > 从java 8中的字符串列表生成自然id的映射作为键和字符串作为值

问题描述

假设我有一个字符串列表

List<String> fourthList = Arrays.asList("abc","def","ghi");

我想把它转换成像{1=abc,2=def,3=ghi}这样的 Map 。

java 中的收集器不允许我这样做,因为它只接受 keyMapper 中的方法。

标签: javajava-8

解决方案


根据Hadi J的评论(推荐),您可以使用:

IntStream.rangeClosed(0, list.size() - 1) 
         .mapToObj(i -> new AbstractMap.SimpleEntry<Integer, String>(i + 1, list.get(i))) 
         .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));

另一种解决方法

List<String> list = Arrays.asList("abc", "def", "ghi");

将 key转换ListMap<Integer, String>整数并以 开头0...n

AtomicInteger index = new AtomicInteger(0);
Map<Integer, String> map = list.stream()
            .collect(Collectors.toMap(s -> index.incrementAndGet(), Function.identity()));
map.forEach((l, m) -> System.out.println(l + "  " + m));

输出:

1  abc
2  def
3  ghi

我今年早些时候做过类似的 Map 做法,你可以看看:https ://github.com/vishwaratna/ThatsHowWeDoItInJava8/blob/master/src/ListToMapWIthKeyAsInteger.java


推荐阅读