我有两个列表,其中存储了一些信息。第一个列表的元素是从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]
有人能帮帮我吗?谢谢!
答案 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?
这将对两组执行匹配(您可能希望查看从第一组中拆分字符串)并为您提供两者中存在的所有元素。