要映射的字符串列表 Java8
List of String to Map 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.
为什么要以日期为key?它应该将日期作为值而不是键。
我认为你所拥有的很好,假设 \.
匹配单个字符 .
。
但是,您可以通过将正则表达式编译成 Pattern
并使用 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}
我的应用程序中有一个字符串列表。每个字符串实际上都是由“.”连接的 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.
为什么要以日期为key?它应该将日期作为值而不是键。
我认为你所拥有的很好,假设 \.
匹配单个字符 .
。
但是,您可以通过将正则表达式编译成 Pattern
并使用 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}