使用Java流将字符串拆分为映射
我想拆分以下字符串并将其存储到地图中。使用Java流将字符串拆分为映射,java,split,hashmap,java-stream,Java,Split,Hashmap,Java Stream,我想拆分以下字符串并将其存储到地图中。 String = "key_a:<value_a1>\r\n\r\nkey_b:<value_b1>\r\n\r\nkey_c:<value_c1, value_c2, value_c3>" 我目前只有将不同的键值对彼此分开的逻辑,但我不知道如何实现将值彼此分开、删除括号和映射属性的逻辑 String strBody = "key_a:<value_a1>\r\n\r\nke
String = "key_a:<value_a1>\r\n\r\nkey_b:<value_b1>\r\n\r\nkey_c:<value_c1, value_c2, value_c3>"
我目前只有将不同的键值对彼此分开的逻辑,但我不知道如何实现将值彼此分开、删除括号和映射属性的逻辑
String strBody = "key_a:<value_a1>\r\n\r\nkey_b:<value_b1>\r\n\r\nkey_c:<value_c1, value_c2, value_c3>"
Map<String, List<String>> map = Pattern.compile("\\r?\\n")
.splitAsStream(strBody)
.map(s -> s.split(":"))
//...logic for splitting values apart from each other, removing <> brackets and storing it in the map
)
String strBody=“key\u a:\r\n\r\nkey\u b:\r\n\r\nkey\u c:
Map Map=Pattern.compile(\\r?\\n)
.splitAsStream(strBody)
.map(s->s.split(“:”)
//…用于将值彼此分开、删除括号并将其存储在地图中的逻辑
)
您可以筛选具有两个值的数组,然后使用将元素分组到Map
,您可以找到有关groupingBy
和`映射'的更多示例
Map<String, List<String>> map = Pattern.compile("\\r?\\n")
.splitAsStream(strBody)
.map(s -> s.split(":"))
.filter(arr -> arr.length == 2)
.collect(Collectors.groupingBy(arr -> arr[0],
Collectors.mapping(arr -> arr[1].replaceAll("[<>]", ""),
Collectors.toList())));
Map=Pattern.compile(\\r?\\n)
.splitAsStream(strBody)
.map(s->s.split(“:”)
.filter(arr->arr.length==2)
.collect(收集器.groupingBy(arr->arr[0],
Collectors.mapping(arr->arr[1].replaceAll(“[]”,“”),
收藏家;
您可以筛选具有两个值的数组,然后使用将元素分组到Map
,您可以找到有关groupingBy
和`映射'的更多示例
Map<String, List<String>> map = Pattern.compile("\\r?\\n")
.splitAsStream(strBody)
.map(s -> s.split(":"))
.filter(arr -> arr.length == 2)
.collect(Collectors.groupingBy(arr -> arr[0],
Collectors.mapping(arr -> arr[1].replaceAll("[<>]", ""),
Collectors.toList())));
Map=Pattern.compile(\\r?\\n)
.splitAsStream(strBody)
.map(s->s.split(“:”)
.filter(arr->arr.length==2)
.collect(收集器.groupingBy(arr->arr[0],
Collectors.mapping(arr->arr[1].replaceAll(“[]”,“”),
收藏家;
您的输入有两个\r\n
要分隔条目,您还需要将其拆分,否则将得到空条目,然后需要过滤掉
在流中处理之前,我会从字符串中删除尖括号。
然后只剩下收集的步骤了
Map<String, String> map = Pattern.compile("\\r?\\n\\r?\\n")
.splitAsStream(strBody.replaceAll("[<>]",""))
.map(s -> s.split(":"))
.collect(Collectors.toMap(e -> e[0], e-> e[1]));
Map=Pattern.compile(\\r?\\n\\r?\\n)
.splitAsStream(strBody.replaceAll(“[]”,“”)
.map(s->s.split(“:”)
.collect(Collectors.toMap(e->e[0],e->e[1]);
您的输入有两个\r\n
要分隔条目,您还需要将其拆分,否则将得到空条目,然后需要过滤掉
在流中处理之前,我会从字符串中删除尖括号。
然后只剩下收集的步骤了
Map<String, String> map = Pattern.compile("\\r?\\n\\r?\\n")
.splitAsStream(strBody.replaceAll("[<>]",""))
.map(s -> s.split(":"))
.collect(Collectors.toMap(e -> e[0], e-> e[1]));
Map=Pattern.compile(\\r?\\n\\r?\\n)
.splitAsStream(strBody.replaceAll(“[]”,“”)
.map(s->s.split(“:”)
.collect(Collectors.toMap(e->e[0],e->e[1]);
另一种方法,也可以拆分值列表:
Map<String,List<String>> result =
Pattern.compile("[\\r\\n]+")
.splitAsStream(strBody)
.map(s -> s.split(":"))
.map(arr -> new AbstractMap.SimpleEntry<>(
arr[0],
Arrays.asList(arr[1].replaceAll("[<>]", "").split("\\s*,\\s"))))
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
映射结果=
模式。编译(“[\\r\\n]+”)
.splitAsStream(strBody)
.map(s->s.split(“:”)
.map(arr->new AbstractMap.SimpleEntry(
arr[0],
Arrays.asList(arr[1].replaceAll(“[]”,“).split(“\\s*,\\s”))
.collect(Collectors.toMap(Map.Entry::getKey,Map.Entry::getValue));
另一种方法,也可以拆分值列表:
Map<String,List<String>> result =
Pattern.compile("[\\r\\n]+")
.splitAsStream(strBody)
.map(s -> s.split(":"))
.map(arr -> new AbstractMap.SimpleEntry<>(
arr[0],
Arrays.asList(arr[1].replaceAll("[<>]", "").split("\\s*,\\s"))))
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
映射结果=
模式。编译(“[\\r\\n]+”)
.splitAsStream(strBody)
.map(s->s.split(“:”)
.map(arr->new AbstractMap.SimpleEntry(
arr[0],
Arrays.asList(arr[1].replaceAll(“[]”,“).split(“\\s*,\\s”))
.collect(Collectors.toMap(Map.Entry::getKey,Map.Entry::getValue));
试试这个
String strBody = "key_a:<value_a1>\r\n\r\nkey_b:<value_b1>\r\n\r\nkey_c:<value_c1, value_c2, value_c3>";
Map<String, List<String>> result = Arrays.stream(strBody.split("\\R\\R"))
.map(e -> e.split(":", 2))
.collect(Collectors.toMap(a -> a[0],
a -> List.of(a[1].replaceAll("^<|>$", "").split("\\s,\\s*"))));
System.out.println(result);
试试这个
String strBody = "key_a:<value_a1>\r\n\r\nkey_b:<value_b1>\r\n\r\nkey_c:<value_c1, value_c2, value_c3>";
Map<String, List<String>> result = Arrays.stream(strBody.split("\\R\\R"))
.map(e -> e.split(":", 2))
.collect(Collectors.toMap(a -> a[0],
a -> List.of(a[1].replaceAll("^<|>$", "").split("\\s,\\s*"))));
System.out.println(result);