比较java中两个列表的元素

时间:2016-05-28 20:45:40

标签: java

我有两个列表,其中存储了一些信息。第一个列表的元素是从DB中提取的(它们是食谱的成分),在第二个列表中存储了一些最喜欢的成分。我想比较两个列表,当成分匹配时,我想将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]

有人能帮帮我吗?谢谢!

2 个答案:

答案 0 :(得分:1)

您可以简单地添加内部循环来检查内容。您的问题是来自 List2 的元素可以包含 list1 而不是完全相同。例如,list1有“200 grame fusilli cu legume(spanac si mere)”,而list 2只有“mere”。这可以通过添加另一个内部for循环来解决。

在这里看到下面的小代码我修复了“ al3 ”的内容。对于 al4

,你也可以这样做
Select * into azuretable from datasource;

对于你的输入集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");

       }

由于list2元素可以在list1元素中,因此我已经相应地自定义了代码。您可以根据输入模式自定义代码。

答案 1 :(得分:0)

您是否看过使用CollectionUtils.intersection

这将对两组执行匹配(您可能希望查看从第一组中拆分字符串)并为您提供两者中存在的所有元素。