2016-02-17 20 views
-4

我有两个JSON文件,简化他们的样子:如何使用2个列表生成结果列表(使用Java)?

LIST 1 [{AA,1},{AJ,2},{RA,5},{ZA,15},... 。很长]

LIST 2 [{AA,0.1},{AJ,0.2},{ZA,1.0},{RA,0.6},....很长]

现在我需要做的是将它们转换为对象(简单),然后通过遍历列表1并查找列表2中的每个代码(AA,AJ,ZA等)以获得值然后乘以这两个值来生成第三个列表生成ê列表3.

所以表3(结果)将如下所示:

[{AA,1 * 0.1},{AJ,2 * 0.2},{RA,5 * 0.6},{ ZA,15 * 1.0} ...等]

问题:

通过表1和每个代码迭代,通过列表2迭代找到它(和它可能根本不存在),是极其效率低下。

什么是有效生成结果列表的好方法?

UPDATE

我意识到,它并不总是在列表2.当代码不存在,是因为它是需要使用其他代码来执行计算以获得同等价值的直线查找:

说明1 [{ZZ,99}]

LIST 2 [{AZ,0.9},{ZA,1.0}]

结果列表 [{ZZ,99 * 0.9 * 1.0}]

+3

转换列表匹配,然后尝试不用彷徨方法之前,映射其相当快 –

+0

与澄清做什么,如果代码没有在清单2中,我假设我需要某种图形 –

回答

0

你可以试试这个:(我不知道什么是您的列表类型,但尝试的方式,我会展示)

for(int i=0; i<list1.size() /*Or lisr1.lenght*/; i++) { 
    int num1 = list1[i][1]; 
    int num2 = list2[i][1]; 
    String[] array = new String[2]; 
    array[0] = list1[i][0]; 
    array[1] = String.valueOf(num1*num2); 
    list3[i] = larray; 
} 
0

我会用字母作为键和数字作为值使用哈希映射。
然后你可以itterate这样的:

Hashmap<String, Double> listC = new Hashmap<String, Double>(); 
for (String key: listA.keySet()){ 
    if (listB.contains(key)){ 
     listC.put(key, listB.get(key)*listA.get(key)); 
    } 
} 
+0

我建议使用listA.entrySet()而不是迭代keySet的结果并分别为每个键获取值。 只是我的两美分:) – grange

+0

它取决于b中找到的条目中找到的条目的关系。 listA.entrySet()获取不必要的值并创建不必要的对象。不错的想法虽然:) @grange –