【问题标题】:HashMap using streams and substringHashMap 使用流和子字符串
【发布时间】:2019-02-07 18:17:40
【问题描述】:

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

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

【问题讨论】:

  • 你自己试过什么?
  • 我从这个开始:"Arrays.stream(line.split(";")).collect(Collectors.toMap",但没有更进一步
  • 我建议您继续,编辑问题并发布您已经尝试过的内容。
  • 当字符甚至不存在时,为什么要用; 分割字符串? :) 然后是方法引用和 lambda 用法的区别。
  • 这只是一个错字,对不起

标签: java substring java-stream


【解决方案1】:

您可以使用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) - 它将返回从索引 0 开始、长度为 1(即第一个字符)的子字符串。

第二个参数是 valueMapper。这是第一个字符之后的其余部分。 part.substring(1) - 返回从索引 1 开始的子字符串(由于未指定结束索引,因此将其视为 part.length

【讨论】:

    【解决方案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

    【讨论】:

      猜你喜欢
      • 2016-10-30
      • 1970-01-01
      • 2014-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多