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

时间:2017-02-12 06:59:11

标签: java arrays servlets multidimensional-array

问题

我得到了一个从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,但首先要检查是否已经安装了一个。

1 个答案:

答案 0 :(得分:1)

这是一个将CSV数组转换为2D数组的1-liner,而不是与框架作斗争:

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