簡體   English   中英

比較java中兩個列表的元素

[英]Compare elements of two lists in java

我有兩個列表,其中存儲了一些信息。 第一個列表的元素是從數據庫中提取的(它們是食譜的成分),在第二個列表中存儲了一些最喜歡的成分。 我想比較兩個列表,當成分匹配時,我想在總和上加 1。 我的問題是當我解析第一個列表時,將成分與第二個列表進行比較,但是在我的第一個列表中,我的元素不是由一個字符串組成的(一個元素有 2-3 個單詞),當我比較列表時,只比較最后一個元素,不比較元素的組件。

第一個列表:

[200 grame fusilli cu legume (spanac si mere);
200 grame smantana 12%; 
50 grame iaurt; 
50 grame cascaval afumat; 
1/2 lingurite mustar; 
doi catei de usturoi sau o lingurita de usturoi deshidratat; 
o lingur? ulei de masline; 
mere]

第二個名單:

[afine, almette, alune, alune, albus de ou de gaina, alune, andive, mere]

我的結果是

[0, 0, 0, 0, 0, 0, 0, 0, 0]

我們可以看到“mere”這個詞在第一個列表中遇到了兩次,在第二個列表中遇到了一次,但結果是 0。我該如何解決這個問題?

這是我的Java代碼:

rs=ps.executeQuery();                           
while( rs.next()){
String nrRet = rs.getString("Ingrediente");          
firstList.add(nrRet);                  
}
System.out.println(firstList);
Statement st1 = con.createStatement();
rs1 = st1.executeQuery("Select Nume from ingredientplacut where Id_user = '24'");


 while( rs1.next()){
   String nrRet1 = rs1.getString("Nume");
   secondList.add(nrRet1);                                
   }

   System.out.println(secondList);      
   ArrayList<String> al3= new ArrayList<String>();
   for (String temp : firstList)
   al3.add(secondList.contains(temp) ? "Yes" : "No");
   System.out.println(al3);


   ArrayList<Integer> al4= new ArrayList<Integer>();
   for (String temp2 : firstList)
   al4.add(secondList.contains(temp2) ? 1 : 0);
   System.out.println(al4);

我的輸出是:

First list : [200 grame fusilli cu legume (spanac si **mere**);
200 grame smantana 12%; 
50 grame iaurt; 
50 grame cascaval afumat; 
1/2 lingurite mustar; 
doi catei de usturoi sau o lingurita de usturoi deshidratat; 
o lingur? ulei de masline; 
**mere**]
Second list: [afine, almette, alune, alune, albus de ou de gaina, alune, andive, mere]

我的結果是[0, 0, 0, 0, 0, 0, 0, 0, 0]而不是[0, 0, 0, 0, 0, 0, 0, 0, 1]

有人可以幫助我嗎? 謝謝!

您可以簡單地添加一個內部 for 循環來檢查內容。您的問題是List2 中的一個元素可以包含在list1的元素內而不是完全相同。例如,list1 有“200 克 fusilli cu 豆科植物(spanac si mere)”和列表 2 只有“僅僅”。這可以通過添加另一個內部 for 循環來解決。

看下面的小代碼這里我已經修復了“ al3 ”的內容。你可以對al4做同樣的事情

 for (String temp : firstList)
       {
           boolean isTrue=false;
           for(String temp2:secondList)
           {
               if(temp.contains(temp2))
               {
                   isTrue=true;
                   break;
               }
           }
           if(isTrue)
               al3.add("YES");
           else
               al3.add("NO");

       }

對於 al4 的輸入集代碼將是:

for (String temp2 : secondList) {
        boolean isTrue = false;
        for (String temp : firstList) {
            if (temp.contains(temp2)) {
                isTrue = true;
                break;
            }
        }
        if (isTrue)
            al4.add(1);
        else
            al4.add(0);
    }

由於 list2 元素可以在 list1 元素內,我已經相應地自定義了代碼。您可以根據輸入模式自定義代碼。

你看過使用CollectionUtils.intersection嗎?

這將對兩個集合執行匹配(您可能希望查看從第一個集合中拆分您的字符串)並為您提供兩者中存在的所有元素。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM