-3

我有一个对象数组列表....每个数组中有 4 个对象。

我需要阅读完整列表并将所有在 element[1] 处具有相同值的数组放在单独的列表中。

怎么做?

例如我有一个列表“数据”

其中有第 n 个对象数组,例如

array[0]
array[1]
array[2]
⋮ 
array[n]

每个数组有 4 个值

array[0] has 0,23,BD,100
array[1] has 1,23,FG,200
array[2] has 3,34,GH,400
array[3] has 8,87,UJ,600
⋮ 
array[n] has 98,23,KM,9000

现在我需要输入array[0], array[1] and array[n]相同list(List1)的值,因为它们都具有相同的值'element 2' i-e '23'

array[2]在单独list(List2)array[3]单独中,list(List3)因为没有其他数组具有与它们相似的“元素 2”。

所有数组都是对象类型。

4

1 回答 1

1

我认为你得到这样的值是因为你从一个或多个表中选择属性的子集。实际上,您最终会得到一个 type 数组的列表Object。这是因为每个属性都有自己的类型,所以可以处理这种未定义情况的通用超类型就是Object它自己。

您可以在这里采取两种方法。一个将需要与数据库的增强交互,另一个将用额外的处理替换此查询调整,以准备您刚刚检索到的数据。

选项 1:进一步参数化您的查询

在查询中添加另一个条件,在其中定义第二个属性(element 2如您命名的那样)。然后查询将具有以下额外条件:

AND element2 = :element2

这样,您可以确定element 2何时查询数据,直接获取相关数据的每个子集。这种方法需要事先了解您要检索的值以及与值一样多的查询。

这些值可以通过一个简单的查询来检索:

SELECT DISTINCT(element2) FROM <YOUR_TABLES_HERE>

每次执行查询时,您仍然会获得 a ListObject[]但是这一次,它们都将具有相同的值 for element 2

方案二:处理刚刚获得的数据

如果更改查询不是一种选择(或者由于任何原因没有一种简单的方法可以了解不同的值element 2可以采用),那么您将不得不处理刚从数据库中获得的原始数据。

我建议您将 aMap与一些Lists 混合使用。假设element 2位于1数组的索引下,您必须遍历该列表,检查值并将其添加到地图中:

Map<Long, List<Object[]>> queriedResultsMap = new HashMap<Long,List<Object[]>>();
//Iterate over the obtaines database values
for(Object[] currentArray : yourListOfObject) {
    if(!queriedResultsMap.containsKey(currentArray[1])) {
        //No element with that value for "element 2" is on the map yet,
        //so a new container (List) is created.
        queriedResultsMap.put(currentArray[1],new ArrayList<Object[]>());
    }
    //Adds the element to the associated list.
    queriedResultsMap.get(currentArray[1]).add(currentArray);
}

这段简单的代码会遍历您当前的数组列表,并将它们中的每一个添加到与地图键的 valye 关联的列表中element 2。在此映射中,键是 的值,element 2关联的值是 a List,其中包含所有找到的为 设置了相应值的注册表element 2

if每次遇到新值时,该语句都会创建一个新列表element 2,并将其与该值相关联。

最后,要使用数据,您只需执行以下操作:

queriedResultsMap.get(element2Value);

Whereelement2Value包含您要为其获取结果的值。映射返回的列表包含具有特定值的所有结果element 2。如果没有返回列表(get方法返回null),您知道您刚刚运行的查询没有返回该值的结果element 2

该地图允许在每个找到的值之间直接关联element 2,还可以让您直接了解所有获得的值,同时让您有机会立即检查是否检索到特定值。要确切知道element 2找到了哪些值,只需获取keySet地图的 并知道是否检索到给定值,请使用 的containsKey方法Map

使用最适合您的方法。

于 2013-03-27T18:23:17.237 回答