全新的Java,我试图从一个数组到另一个数组中找到匹配的元素,似乎无法理解如何做到这一点。以下是数据如何以及我获得了多远的示例:
在此代码中以及打印此行之后,数据的方式如下:
ArrayList<String> all_accounts = new ArrayList<String>();
all_accounts.add(acc);
System.out.println("\nArray 1:" + all_accounts);
结果数组1:
Array 1:[77737320]
Array 1:[88405378]
Array 1:[00056893]
Array 1:[10709816]
ArrayList<String> cancel_accounts = new ArrayList<String>();
cancel_accounts.add(cancel_acc);
System.out.println("\nArray 2:" + cancel_accounts);
数组2的结果:
Array 2:[77737320]
Array 2:[]
Array 2:[]
Array 2:[]
在这里堆叠,我仍然无法理解为什么它不匹配:
String found = null;
for (String account: all_accounts) {
for (String canceled: cancel_accounts) {
System.out.println(canceled);
found = canceled;
}
System.out.println(found);
if(account.equals(found) ) {
System.out.println(account);
}
}
在这种情况下,我需要找到匹配的元素77737320。 谢谢你的期待!
答案 0 :(得分:3)
+1来自user6904265的回答
但是,您无需创建新的HashSet。您可以使用ArrayList.retainAll()。如果要维护all_accounts列表,请创建一个新克隆并使用它。
答案 1 :(得分:1)
您可以将其实现为集合之间的交集:
Set<String> set_all_account = new HashSet<String>(all_accounts);
Set<String> set_cancel_accounts = new HashSet<String>(cancel_accounts);
set_all_account.retainAll(set_cancel_accounts);
set_all_account.forEach(x -> System.out.println("Element matched: "+x));
或者如kartiks在评论中所述,您可以直接在retainAll
数组上调用all_accounts
方法:
all_accounts.retainAll(cancel_accounts);
all_accounts.forEach(x -> System.out.println("matched element: "+x));
请注意此解决方案,因为在这种情况下retainAll
直接应用于ArrayList并对其进行修改(因为您可以看到最终结果位于all_accounts
数组中)。此外,重复元素仍保留在结果数组中。
最后一次实现(如果你想要计算交集并在一行中打印结果,这个版本也保留了重复的元素):
all_accounts.stream().filter(x -> cancel_accounts.contains(x)).forEach(x -> System.out.println("matched element: "+x));
答案 2 :(得分:0)
只需在for-loops中添加equals
项检查(即使没有List#contains
方法也可以使用)
for(String account: all_accounts) {
System.out.println(account);
for(String canceled: cancel_accounts){
System.out.println(canceled);
if(account.equals(cancelled)){
//you've found first intersection, cancelled exists in both
System.out.println(canceled + " is the same as " + account);
}
}
}
答案 3 :(得分:0)
您可以遍历一个列表并在第一个列表中搜索每个元素。
for (String account: all_accounts) {
if (cancel_accounts.contains(account) {
// Match found - do something....
System.out.println(account);
}
}