2

我有一个 String[] 列表,其中包含从数据库返回的一些数据

List<String[]> x;

现在对于每个“x”,我必须存储它的相对 Y。(想象一下“x”包含从“SELECT DISTINCT xColumn1,xColumn2 FROM table”返回的元素,现在对于每个元素,我必须存储来自另一个查询的数据)。

Y 的元素将存储在这里:

List<List<String[]>> yElements;

我读过我可以声明一个固定长度的列表,但我不知道如何。这就是我所做的:

yElements = Arrays.asList(new List<String[]>[x.sixe()]);

Netbeans 告诉我“通用数组创建”错误。

我还想告诉你,我必须有一个固定长度的列表来将一个 String[] 列表存储在这个列表列表的特定索引中。(如果你能告诉我如何处理一个数组,那就太好了!)谢谢。

4

2 回答 2

0

您不能使用创建泛型类型数组的实例new

一种替代方法是:

import java.lang.reflect.*;
import java.util.*;

public class Test
{
    public static void main( String args[] )
    {
        List<String[]> x = ...;
        List<List<String[]>> yElements = Arrays.asList(
                (List<String[]>[])Array.newInstance(List.class, x.size()));
    }
}

相关问题:如何在 Java 中创建泛型数组?. (那里的示例是关于创建泛型类型参数数组的实例......但同样的方法适用于此处。)


但是,我认为这整个问题是基于一个不正确的假设。

我还想告诉你,我必须有一个固定长度的列表来将一个 String[] 列表存储在这个列表列表的特定索引中。

你不必有一个固定大小的列表。从计算的角度来看,您的代码可以与非固定大小的列表一起正常工作......前提是您不添加或删除列表元素。(事实上​​,Arrays.asList用于包装数组不会阻止其他一些代码尝试添加/删除元素......)无论如何......如果你只是制作实现类型ArrayList<ArrayList<ArrayList<String>>>,那么通用数组创建问题就会消失。

另外,我怀疑使用.x.size()的大小是不正确的yElements。可能的大小yElements应该由x实例的数量决定,而不是给定x实例的大小。

于 2012-11-25T02:57:03.073 回答
0

如果您希望列表的大小绝对固定,则可以使用本机数组。它们可以是多维的,例如您可以拥有String[][] x或 `String[][][] y'。

然而,老实说,您的方法有点令人困惑,从设计的角度来看并不那么清晰。

为什么不像评论中所建议的那样,拥有一个具有两列(xColumn1,xColumn2)的对象,然后将 Y 元素放在一个单独的对象中,然后可以与第一个对象相关联?

所以:

class XDetails
{
   String xColumn1;
   String xColumn2;

   YDetails relatedY;
   ...
}

class YDetails
{
   ... fields of Y ...

}

然后你可以有一个数组或List<XDetails>

于 2012-11-25T02:58:25.523 回答