使用流和子字符串的HashMap

时间:2018-09-02 12:33:18

标签: java substring java-stream

我想知道如何实现以下目标。

  

“ 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));

2 个答案:

答案 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