假设我有两种不同的给定pojo类型的字符串。
List 1 = "one", "two", "three", "four", "five".
List 2 = "one", "two", "four", "five".
我想检索一个在另一个列表中找不到的字符串,并将其添加到另一个列表中(比如列表3)。 我怎么能这样做?
我正在尝试这个: -
for ( SettlementReportNB showSellementReport : settlementReportList )
{
String merchantreferencenumber = showSellementReport.getMerchantreferencenumber();
for ( AllTransactions showAllTransaction : allTransactionsList )
{
String merchantTxnId = showAllTransaction.getMerchantTxnId();
if ( !merchantreferencenumber.equals( merchantTxnId ) )
{
idNotFound.add( merchantTxnId );
}
}
}
但它没有给我一个预期的答案。
答案 0 :(得分:2)
您要过早地将字符串添加到结果中。在调用idNotFound.add();
定义boolean
变量notFound
,并在循环前将其设置为true
。如果在循环中找到匹配项,请将变量设置为false
,然后退出循环。
如果循环结束后变量仍为true
,请致电idNotFound.add();
答案 1 :(得分:1)
或者你可以这样:
List list1 = Arrays.asList("one", "two", "three", "four", "five");
List list2 = Arrays.asList("one", "two", "four", "five");
//create a clone of list1
List list3 = new ArrayList<>(list1);
//remove all elements of list2 from list1
list3.removeAll(list2);
//output : [three]
System.out.print(list3);
你最终将只有[三]
的list3或尝试这样的方法来保留现有代码:
for ( SettlementReportNB showSellementReport : settlementReportList ) {
String allTransactionsList = showSellementReport.getMerchantreferencenumber();
if ( isNotContain(allTransactionsList, allTransactionsList))
{
idNotFound.add( merchantTxnId );
}
}
private boolean isNotContain(List allTransactionsList, String merchantreferencenumber) {
for ( AllTransactions showAllTransaction : allTransactionsList )
{
String merchantTxnId = showAllTransaction.getMerchantTxnId();
if ( merchantreferencenumber.equals( merchantTxnId ) )
{
return false;
}
}
return true;
}
答案 2 :(得分:0)
你的第二个for循环不检查每个元素。它仅检查一个元素是否与比较的combo()
不匹配。在确定它不存在之前,你必须遍历整个列表,例如。
String
或者您可以使用List.util函数的任何其他答案
答案 3 :(得分:0)
可能是这种情况
List<String> a1 = new ArrayList<>(Arrays.asList( "one", "two", "three", "four", "five"));
List<String> a2 = new ArrayList<>(Arrays.asList( "one", "two", "four", "five"));
Set<String> s1 = new HashSet<>(a1);
Set<String> s2 = new HashSet<>(a2);
s2.removeAll(s1);
List<String> a3 = new ArrayList<>(s2);
List<String> result = new ArrayList<>(Arrays.asList( "six"));
result.addAll(a3);
答案 4 :(得分:0)
如果您使用的是Java 8,那么使用 Lambdas - 它会更快,并且可以为您节省一个循环。
答案 5 :(得分:0)
如果您需要验证第二个列表中不存在的所有元素,只需创建一个Set并使用第一个列表中的!contains,如果您需要验证这两个列表,那么从示例中添加第二个下面:
Set<String> list3 = new HashSet<String>();
for (String text : list1) {
if (!list2.contains(text)) list3.add(text);
}
for (String text : list2) {
if (!list1.contains(text)) list3.add(text);
}
答案 6 :(得分:0)
List a = new ArrayList(asList("one", "two", "three", "four", "five"));
List b = new ArrayList(asList("one", "two", "four", "five"));
List c = new ArrayList();
c.addAll(a);
c.addAll(b);
c.removeIf(o -> a.contains(o) && b.contains(o));