映射 Java8 的字符串列表

我的应用程序中有一个字符串列表。每个字符串实际上是由“.”连接的 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.

为什么以日期为关键?它应该将日期作为值而不是键。


慕仙森
浏览 126回答 1
1回答

慕桂英3389331

我认为你所拥有的很好,假设\\.匹配单个字符.。但是,您可以通过将正则表达式编译为 aPattern并使用Stream#map:Pattern pattern = Pattern.compile("[.]");Arrays.asList("Stack.Overflow")&nbsp; &nbsp; &nbsp; .stream()&nbsp; &nbsp; &nbsp; .map(pattern::split)&nbsp; &nbsp; &nbsp; .collect(Collectors.toMap(s -> s[0], s -> s[1]));输出:{Stack=Overflow}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java