为了账号安全,请及时绑定邮箱和手机立即绑定

映射 Java8 的字符串列表

映射 Java8 的字符串列表

慕仙森 2021-10-13 15:58:56
我的应用程序中有一个字符串列表。每个字符串实际上是由“.”连接的 2 个不同字符串的输出。例如 Stack.Overflow现在,我试图将此列表转换为 Map,键是字符串的第一部分,值是第二部分。例如 key=Stack 和 value=Overflow我正在做这样的事情:List<String> sampleList = someList here;Map<String, String> outputMap= sampleList .stream().collect(            Collectors.toMap(s->s.toString().split("\\.")[0],s->s.toString().split("\\.")[1]));如何实现?谢谢它似乎对我不起作用。见下文: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.为什么以日期为关键?它应该将日期作为值而不是键。
查看完整描述

1 回答

?
慕桂英3389331

TA贡献2036条经验 获得超8个赞

我认为你所拥有的很好,假设\\.匹配单个字符.。


但是,您可以通过将正则表达式编译为 aPattern并使用Stream#map:


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


Arrays.asList("Stack.Overflow")

      .stream()

      .map(pattern::split)

      .collect(Collectors.toMap(s -> s[0], s -> s[1]));

输出:


{Stack=Overflow}


查看完整回答
反对 回复 2021-10-13
  • 1 回答
  • 0 关注
  • 125 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信