Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Java流将字符串拆分为映射_Java_Split_Hashmap_Java Stream - Fatal编程技术网

使用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);