有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

使用流和子字符串的java HashMap

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

"t12345-g1234-o1234"

我有一行包含多个由连字符分隔的字段,该字段由其标识符(第一个字母)和值组成

如何使用Java8流实现下面这样的映射

{"t","12345"} , {"g","1234"}, {"o","1234"}

编辑

我尝试了以下方法,但不知道如何获取子字符串信息

Arrays.stream(line.split("-"))
.collect(Collectors.toMap(String::substring(0,1),String::substring(1));

共 (2) 个答案

  1. # 1 楼答案

    您可以使用Collectors.toMap

    Map<String, String> result = Arrays.stream(s.split("-"))
                .collect(Collectors.toMap(part -> part.substring(0, 1),
                        part -> part.substring(1)));
    

    toMap的第一个参数是键映射器。它选择键作为分割字符串部分的第一个字符part.substring(0, 1)-它将返回从长度为1(第一个字符)的索引0开始的子字符串

    第二个参数是valueMapper。第一个字符后面是其余字符part.substring(1)返回从索引1开始的子字符串(因为没有指定结束索引,所以它将被视为part.length

  2. # 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