Java 将字符串转换为HashMap

Java 将字符串转换为HashMap,java,string,java-8,java-stream,Java,String,Java 8,Java Stream,我有一个Java命令行应用程序,在启动.jar文件时使用参数。 参数看起来像 --exclude parent1=child1,child2;parent2=child3;parent3 我想将参数转换为HashMap,其中key=parent1,value=[child1,child2] 我尝试使用Streams和split函数,但无法将子字符串转换为字符串数组 Arrays.stream(gotData.split(";")) .map(s -

我有一个Java命令行应用程序,在启动.jar文件时使用参数。 参数看起来像

--exclude parent1=child1,child2;parent2=child3;parent3 
我想将参数转换为HashMap,其中key=parent1,value=[child1,child2]

我尝试使用Streams和split函数,但无法将子字符串转换为字符串数组

Arrays.stream(gotData.split(";"))
            .map(s -> s.split("="))
            .collect(Collectors.toMap(s -> s[0], s -> s[1].split(",")));

要解决此问题,您必须每次检查数据,因为在“收集”部分中,您尝试为不存在的parent3拆分s[1],为了避免此问题,您可以先检查数组的长度,然后再执行类似操作

Arrays.stream(gotData.split(";"))
    .map(s -> s.split("="))
    .collect(Collectors.toMap(s -> s[0], s -> {
        // If there size of array great than 1 mean there are children.
        if (s.length > 1) {
            return s[1].split(",");
        }
        // Else just return an empty array.
        return new String[0];
    }));
如果有其他情况,可能需要在此代码中添加其他条件以避免任何类型的错误

要显示响应,请执行以下操作:

response.forEach((k, v) -> System.out.println(k + " - " + Arrays.toString(v)));
奥普茨


要解决此问题,您必须每次检查数据,因为在“收集”部分中,您尝试为不存在的parent3拆分s[1],为了避免此问题,您可以先检查数组的长度,然后再执行类似操作

Arrays.stream(gotData.split(";"))
    .map(s -> s.split("="))
    .collect(Collectors.toMap(s -> s[0], s -> {
        // If there size of array great than 1 mean there are children.
        if (s.length > 1) {
            return s[1].split(",");
        }
        // Else just return an empty array.
        return new String[0];
    }));
如果有其他情况,可能需要在此代码中添加其他条件以避免任何类型的错误

要显示响应,请执行以下操作:

response.forEach((k, v) -> System.out.println(k + " - " + Arrays.toString(v)));
奥普茨


可能相关的:可能相关的:我很好!你呢我很好!你呢