2016-02-17 19 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 –