java - 从java 8中的字符串列表生成自然id的映射作为键和字符串作为值
问题描述
假设我有一个字符串列表
List<String> fourthList = Arrays.asList("abc","def","ghi");
我想把它转换成像{1=abc,2=def,3=ghi}这样的 Map 。
java 中的收集器不允许我这样做,因为它只接受 keyMapper 中的方法。
解决方案
根据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转换List
为Map<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
推荐阅读
- excel - 将粘贴值和格式从一张表复制到另一张表时出现 VBA 错误 1004
- asp.net - Hangfire:看起来工作被中止了
- php - 在 Mac 上为 Laravel 7 / Homestead 更新 PHP 到 7.2.5
- webpack - Webpack 需要一个合适的加载器来处理这个文件类型错误
- python - 我的数据库已经有 20 行,但是当我保存新行时,它们的 id 从 1 开始
- django - 如何告诉我的序列化程序可以将字段留空?
- php - php -v 在 IIS 上显示与 phpinfo() 不同的版本
- wxpython - 如何以编程方式调整 StaticText 对象周围的边框?
- excel - 通过 VBA 嵌入 PDF
- php - 什么是在 PHP 中的 foreach 循环中交替颜色的更清洁方法,以及处理速度何时真正成为一个因素?