我想知道如何实现以下目标。
“ t12345-g1234-o1234”
我有一行,其中包含多个由连字符分隔的字段,并且该字段由其标识符(第一个字母)和值组成。
如何使用Java 8流实现如下所示的地图。
{“ t”,“ 12345”},{“ g”,“ 1234”},{“ o”,“ 1234”}
编辑
我尝试了以下操作,但是我不明白如何获取子字符串信息。
Arrays.stream(line.split("-"))
.collect(Collectors.toMap(String::substring(0,1),String::substring(1));
答案 0 :(得分:5)
您可以使用Collectors.toMap
Map<String, String> result = Arrays.stream(s.split("-"))
.collect(Collectors.toMap(part -> part.substring(0, 1),
part -> part.substring(1)));
toMap
的第一个参数是keyMapper。它选择键作为分割字符串部分中的第一个字符。 part.substring(0, 1)
-它将从长度为1的索引0(第一个字符)开始返回子字符串。
第二个参数是valueMapper。剩下的是第一个字符。 part.substring(1)
-返回从索引1开始的子字符串(由于未指定结束索引,因此它将被视为part.length
。
答案 1 :(得分:2)
类似这样的东西:
Map<String, String> map = Arrays.stream(str.split("-"))
.map(s -> Pair.of(s.substring(0, 1), s.substring(1)))
.collect(Collectors.toMap(Pair::getKey, Pair::getValue));
我在这里使用过Pair。