首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >要映射Java8的字符串列表

要映射Java8的字符串列表
EN

Stack Overflow用户
提问于 2018-09-27 08:08:07
回答 1查看 80关注 0票数 -2

我的应用程序中有一个字符串列表。每个字符串实际上是由".“连接的两个不同字符串的输出。例如Stack.Overflow

现在,我正在尝试将这个列表转换为一个Map,key是字符串的第一部分,value是第二部分。例如key=Stack和value=Overflow

我正在做这样的事情:

代码语言:javascript
复制
List<String> sampleList = someList here;

Map<String, String> outputMap= sampleList .stream().collect(
            Collectors.toMap(s->s.toString().split("\\.")[0],
s->s.toString().split("\\.")[1]));

怎样才能实现呢?谢谢

它似乎对我不起作用。如下所示:

代码语言:javascript
复制
List<String> sample = new ArrayList<>();
    sample.add("12345.22-JUN-18");
    sample.add("12345.22-JUN-18");
    sample.add("45678.25-JUN-18");

    sample.add("23456.25-JUN-18");
    sample.add("34567.25-JUN-18");
    sample.add("67890.25-JUN-18");
    sample.add("45678.25-JUN-18");
    sample.add("23456.26-JUN-18");

    Pattern pattern = Pattern.compile("[.]");

    Map<String,String> output = sample.stream()
      .map(pattern::split)
      .collect(Collectors.toMap(s -> s[0], s -> s[1]));

It gives me java.lang.IllegalStateException: Duplicate key 22-JUN-18.

为什么要把日期作为关键字呢?它应该将日期作为值,而不是作为键。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-27 08:12:55

我认为,假设\\.与单个字符.匹配,那么这里的内容就很好了。

但是,您可以通过将正则表达式编译为Pattern并使用Stream#map来清理它

代码语言:javascript
复制
Pattern pattern = Pattern.compile("[.]");

Arrays.asList("Stack.Overflow")
      .stream()
      .map(pattern::split)
      .collect(Collectors.toMap(s -> s[0], s -> s[1]));

输出:

代码语言:javascript
复制
{Stack=Overflow}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52527603

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档