【问题标题】:How to avoid servlet converting a multidimensional array of string into one-dimensional array of strings?如何避免servlet将多维字符串数组转换为一维字符串数组?
【发布时间】:2017-06-30 07:32:34
【问题描述】:

问题

我得到了一个从 jsp 发送的多维字符串数组,当我尝试获取该数组并将其设置为 servlet 中的一个变量时,我意识到控制器将多维数组字符串转换为一维字符串数组,我从 jsp 的一侧在 console.log 中打印了数组,以确保数组包含字符串数组而不仅仅是字符串,并且 chrome 的日志显示一切正常,所以我想问题一定出在小服务程序。这不是错误,但不是我期望在我的应用程序中实现下一步的行为。

这是我遇到问题的代码:

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 中的请求中获得的多维数组的精确副本?

非常感谢。


解决方案 波西米亚人

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 的项目属性,但首先检查是否已安装。

【问题讨论】:

    标签: java arrays servlets multidimensional-array


    【解决方案1】:

    与其对抗框架,这里是一个将 CSV 数组转换为 2D 数组的 1-liner:

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

    【讨论】:

    • 嘿,它工作得很好!!这就是我一直在寻找的解决方案,但我不知道如何实施。老实说,我从来没有想过如何以这种方式做到这一点。非常感谢您对我的帮助很大!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-28
    • 1970-01-01
    • 2021-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多