我认为你得到这样的值是因为你从一个或多个表中选择属性的子集。实际上,您最终会得到一个 type 数组的列表Object
。这是因为每个属性都有自己的类型,所以可以处理这种未定义情况的通用超类型就是Object
它自己。
您可以在这里采取两种方法。一个将需要与数据库的增强交互,另一个将用额外的处理替换此查询调整,以准备您刚刚检索到的数据。
选项 1:进一步参数化您的查询
在查询中添加另一个条件,在其中定义第二个属性(element 2
如您命名的那样)。然后查询将具有以下额外条件:
AND element2 = :element2
这样,您可以确定element 2
何时查询数据,直接获取相关数据的每个子集。这种方法需要事先了解您要检索的值以及与值一样多的查询。
这些值可以通过一个简单的查询来检索:
SELECT DISTINCT(element2) FROM <YOUR_TABLES_HERE>
每次执行查询时,您仍然会获得 a List
,Object[]
但是这一次,它们都将具有相同的值 for element 2
。
方案二:处理刚刚获得的数据
如果更改查询不是一种选择(或者由于任何原因没有一种简单的方法可以了解不同的值element 2
可以采用),那么您将不得不处理刚从数据库中获得的原始数据。
我建议您将 aMap
与一些List
s 混合使用。假设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
。
使用最适合您的方法。