如何避免Servlet将字符串的多维数组转换为一维数组?

4
问题:
我收到了一个由jsp发送的多维字符串数组,当我尝试获取该数组并将其设置为servlet中的变量时,我意识到控制器将多维字符串数组转换为一维字符串数组。我在jsp的console.log中打印了数组,只是为了确保数组包含字符串数组而不仅仅是字符串,chrome的日志显示一切正常,所以我想问题肯定出现在servlet的一侧。这不是错误,但不是我希望在我的应用程序中实现的行为。
以下是我遇到问题的代码:
String[] arrayCompra = request.getParameterValues("arraycompra[]");

基本上,当我将请求中的数组设置到servlet端的数组时,servlet所做的就像这样:
String[][] array = { {"a","b","c"} , {"d","e","f"} };

变成这样:

String[] array = {"a,b,c", "d,e,f"};

此外,我尝试寻找解决方案,并得到了一些答案和想法,比如添加 .clone(); 但是它给出了相同的结果。我知道有一个 string.Split 方法,但是我需要迭代数组来拆分每个字符串,然后将每个结果数组设置为字符串的多维数组,并且我觉得如果能够避免或解决主要问题,这样做是不必要的。
我做错了什么?有没有办法实现我想要的?有没有更好的方法来制作一个从 servlet 请求中获取的多维数组的精确副本?
提前非常感谢。
解决方案由 Bohemian 提供。
String[][] arrayCompra = Arrays.stream(request.getParameterValues("arraycompra[]")).map(s -> s.split(",")).toArray(String[][]::new);

顺便说一句...这个解决方案的某些方法需要JDK 8或更高版本,而我使用的是1.7,所以我遇到了问题...
lambda expressions are not supported in -source 1.7
(use -source 8 or higher to enable lambda expressions)

只需要将源代码的编译器版本更改为项目属性中的JDK 8即可解决此问题,但首先请检查您是否已经安装了JDK 8。
1个回答

1

不要与框架对抗,这里有一个一行代码的方法可以将CSV数组转换为二维数组:

String[][] arrayCompra = Arrays.stream(request.getParameterValues("arraycompra[]"))
    .map(s -> s.split(","))
    .toArray(String[][]::new);

嘿,它完美地运行了!这就是我一直在寻找的解决方案,但我不知道如何实现。说实话,我永远也想不到要用这种方式来做。你帮了我很多,非常感谢! - Gustavo Glz Q

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接