在Java8中,从字符串列表中生成自然id作为键和字符串作为值的映射
假设我有一个字符串列表在Java8中,从字符串列表中生成自然id作为键和字符串作为值的映射,java,java-8,Java,Java 8,假设我有一个字符串列表 List<String> fourthList = Arrays.asList("abc","def","ghi"); List fourthList=Arrays.asList(“abc”、“def”、“ghi”); 我想把它转换成Map,比如{1=abc,2=def,3=ghi} java中的收集器不允许我这样做,因为它只接受keyMapper中的方法。根据Per的评论(推荐),您可以使用: IntStream.rangeClosed(0, list.
List<String> fourthList = Arrays.asList("abc","def","ghi");
List fourthList=Arrays.asList(“abc”、“def”、“ghi”);
我想把它转换成Map,比如{1=abc,2=def,3=ghi}
java中的收集器不允许我这样做,因为它只接受keyMapper中的方法。根据Per的评论(推荐),您可以使用:
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));
输出:
1 abc
2 def
3 ghi
今年早些时候我也做过类似的映射实践,你可以看看:问题是你使用了静态变量
k
使得这个非线程安全,还有许多其他缺点。线程安全现在不是我关心的问题,不管怎样,这是一个好问题。感谢Vishwa,它成功了,然而,我对toMap签名有疑问,因为它接受函数作为参数,但这里它接受变量here@RahulPyasi,您是对的toMap
签名接受函数。Java lambda表达式是Java进入函数式编程的第一步。因此,Java lambda表达式是一个不属于任何类的函数。@VishwaRatna这是一个清楚的解释。谢谢你的信息!这个问题以前没人问过,或者我可能还没找到。我能够找到convert list to map,但是在它提到的所有用户类型变量问题中。我只关心字符串类型的列表。map collect=IntStream.rangeClosed(0,fourthList.size()-1)。boxed().collect(Collectors.toMap(i->i+1,fourthList::get));系统输出打印项次(收集);
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