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

标签 java arrays servlets multidimensional-array

问题

我得到了一个从 jsp 发送的多维字符串数组,当我尝试获取该数组并将其设置为 servlet 中的一个变量时,我意识到 Controller 将多维数组字符串转换为一维字符串数组,我从 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 请求中获得的多维数组?

非常感谢。


解决方案 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)

To solve this just change compiler version of your source code into your project properties to JDK 8 but first check whether you have one already installed.

最佳答案

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

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

关于java - 如何避免 servlet 将多维字符串数组转换为一维字符串数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42185009/

相关文章:

Java psexec 交互式远程命令行

java - 当正范围被占用时,实体的负 ID?

javascript - 使用 Array.reduce() 时 Angular Typescript 类型错误

java - 如何在没有脚本的情况下从 jsp 调用 servlet?

java - 致命异常(java.lang.IllegalStateException)

java - 按升序对整数进行排序

java - 需要在不使用 Hashmaps 的情况下找出数组中的重复元素

java - 如何在每次请求时重新加载jsp页面?

java - 使用 google API 在 jsp 页面上显示流程图的最佳方式

java - 使用 Spring Security ACL