2013-03-27 65 views
-3

我有一个对象数组的列表....每个数组都有4个对象。检查列表是否包含相同的数据

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

怎么办?

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

具有像

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

对象的数组的第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] in同list(List1)因为它们全都具有相同的值'element 2' i-e '23'

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

所有数组都是对象类型。

+0

为什么不使用像'ArrayList'或其他任何其他Java实用类? – 2013-03-27 17:35:22

+0

我不知道这里的问题是什么,一个非常糟糕的方式来做到这一点,从列表中取出一个对象,然后遍历列表比较值与您取出的值,然后将该对象添加到记者名单,并重复,直到原来的清单是空的 – jsedano 2013-03-27 17:37:44

+0

Vishal我不知道,我从来没有使用过列表。 – 2013-03-27 17:42:36

回答

1

我想你会得到这样的值,因为你从一个或多个表中选择了属性的一个子集。事实上,你最终会得到一个Object类型的数组列表。这是因为每个属性都有其自己的类型,所以可以处理这种未定义情况的公共超类型本身就是Object

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

选项1:参数化查询远一点

添加另一个条件查询,这里定义第二属性(element 2因为你把它命名为)。随后的查询都会有这样的额外条件:

AND element2 = :element2 

这样,您就可以判断element 2查询数据时,直接获取相关数据的每个子集。这种方法需要先了解您想要检索的值以及查询的值。

的值可以用一个简单的查询检索:

SELECT DISTINCT(element2) FROM <YOUR_TABLES_HERE> 

每次执行查询时,你还是会得到一个Object[]List这个时候,他们都会有相同的值element 2

选项2:过程中,你只得到

数据如果更改查询不是一个选项(或者以任何理由有没有knowhing不同值的简单方式element 2可以),你将有处理刚刚从数据库中获得的原始数据。

我建议您将MapList 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); 
} 

这一段简单的代码遍历当前的列表数组并将它们中的每一个添加到与地图的关键字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,并知道是否检索到给定值,请使用MapcontainsKey方法。

使用任何一种最适合您的方法。

相关问题