我有一个对象数组列表....每个数组中都有4个对象。
我需要读取完整列表并将所有在元素[1]中具有相同值的数组放在单独的列表中。
怎么做?
例如,我有一个列表'data'
,其中包含第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'。
所有数组都是对象类型。
答案 0 :(得分:1)
我认为您正在获取这样的值,因为您从一个或多个表中选择了一个属性子集。实际上,您最终得到了Object
类型的数组列表。这是因为每个属性都有自己的类型,因此可以处理这种未定义情况的常见超类型是Object
本身。
您可以采取两种方法。一个将需要增强与数据库的交互,另一个将使用额外的处理来替换此查询调优,以准备刚刚检索的数据。
选项1:进一步参数化您的查询
在查询中添加另一个条件,您可以在其中定义第二个属性(element 2
,因为您已命名)。然后查询将具有以下额外条件:
AND element2 = :element2
这样,您可以在查询数据时确定element 2
,直接获取相关数据的每个子集。这种方法需要先前了解您要检索的值以及与值一样多的查询。
可以使用简单查询检索值:
SELECT DISTINCT(element2) FROM <YOUR_TABLES_HERE>
每次执行查询时,您仍然会获得List
Object[]
,但这次,element 2
的值都相同。
选项2:处理刚刚获得的数据
如果更改您的查询不是一个选项(或者由于任何原因,没有一种简单的方法可以识别element 2
可以采用的不同值),您将必须处理刚从数据库中获取的原始数据。
我建议您将Map
与某些List
混合使用。假设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);
}
这段简单的代码迭代你当前的数组列表,并将它们中的每一个添加到与element 2
的valye关联的列表中,这是映射的关键。在此映射中,键是element 2
的值,关联的值是List
,其中包含为element 2
设置了相应值的所有已找到的注册表。
if
语句每次遇到element 2
的新值时都会创建一个新列表,并将其与该值相关联。
最后,要使用这些数据,您只需执行以下操作:
queriedResultsMap.get(element2Value);
其中element2Value
包含您要获取结果的值。地图返回的列表包含具有特定值element 2
的所有结果。如果未返回任何列表(get
方法返回null
),则表示您刚刚运行的查询未返回element 2
的值的结果。
地图允许element 2
的每个找到值之间的直接关联,并且还让您直接了解所有获得的值,同时让您有机会立即检查是否检索到特定值。要准确了解element 2
的哪些值,只需获取地图的keySet
,并了解是否检索到给定值,请使用containsKey
的{{1}}方法。< / p>
使用最适合您的方法。