String 仅当所有原始列表中都存在字符串时,组合字符串数组列表并传递到新数组列表
我有四个ArrayList,希望将它们合并。新的ArrayList应仅包含存在于所有其他数组列表中但仅包含一次的字符串。到目前为止,我有以下代码:String 仅当所有原始列表中都存在字符串时,组合字符串数组列表并传递到新数组列表,string,loops,android-studio,arraylist,String,Loops,Android Studio,Arraylist,我有四个ArrayList,希望将它们合并。新的ArrayList应仅包含存在于所有其他数组列表中但仅包含一次的字符串。到目前为止,我有以下代码: //Combine array lists and only keep duplicates private ArrayList<String> getResultList(){ final ArrayList<String> filtered_list = new ArrayList<>();
//Combine array lists and only keep duplicates
private ArrayList<String> getResultList(){
final ArrayList<String> filtered_list = new ArrayList<>();
Set<String> set = new HashSet<>(filtered_list);
filtered_list.addAll(getResultList1());
filtered_list.addAll(getResultList2());
filtered_list.addAll(getResultList3());
filtered_list.addAll(getResultList4());
ArrayList<String> duplicates = new ArrayList<String>();
for (String s : filtered_list) {
if (!set.add(s)) {
duplicates.add(s);
}
}
return duplicates;
}
//组合数组列表并仅保留重复项
私有ArrayList getResultList(){
最终ArrayList filtered_list=新ArrayList();
Set Set=新哈希集(过滤的\u列表);
过滤的_list.addAll(getResultList1());
过滤的_list.addAll(getResultList2());
过滤的_list.addAll(getResultList3());
过滤的_list.addAll(getResultList4());
ArrayList duplicates=新的ArrayList();
用于(字符串s:已筛选的\u列表){
如果(!set.add){
副本。添加;
}
}
返回副本;
}
例如,如果我在所有四个数组中只有一个相同的字符串,那么我当前得到的结果是列表中有三个相同的字符串。我是否需要创建一个包含HashSet的循环?我还没有看到任何这样的例子。任何帮助都将不胜感激。多谢各位 我用以下代码解决了这个问题:
//Combine array lists and only keep duplicates
private ArrayList<String> getResultList(){
final ArrayList<String> filtered_list1 = new ArrayList<>();
final ArrayList<String> filtered_list2 = new ArrayList<>();
final ArrayList<String> filtered_list = new ArrayList<>();
Set<String> set1 = new HashSet<>(filtered_list1);
Set<String> set2 = new HashSet<>(filtered_list2);
Set<String> set = new HashSet<>(filtered_list);
filtered_list1.addAll(getResultList1());
filtered_list1.addAll(getResultList2());
filtered_list2.addAll(getResultList3());
filtered_list2.addAll(getResultList4());
ArrayList<String> duplicates1 = new ArrayList<String>();
for (String s : filtered_list1) {
if (!set1.add(s)) {
duplicates1.add(s);
}
}
ArrayList<String> duplicates2 = new ArrayList<String>();
for (String s : filtered_list2) {
if (!set2.add(s)) {
duplicates2.add(s);
}
}
filtered_list.addAll(duplicates1);
filtered_list.addAll(duplicates2);
ArrayList<String> duplicates = new ArrayList<String>();
for (String s : filtered_list) {
if (!set.add(s)) {
duplicates.add(s);
}
}
return duplicates;
}
//组合数组列表并仅保留重复项
私有ArrayList getResultList(){
最终ArrayList filtered_list1=新ArrayList();
最终ArrayList filtered_list2=新ArrayList();
最终ArrayList filtered_list=新ArrayList();
Set set1=新哈希集(过滤的\u列表1);
Set set2=新哈希集(过滤的\u列表2);
Set Set=新哈希集(过滤的\u列表);
过滤的_list1.addAll(getResultList1());
过滤的_list1.addAll(getResultList2());
过滤的_list2.addAll(getResultList3());
过滤的_list2.addAll(getResultList4());
ArrayList duplicates1=新的ArrayList();
for(字符串s:filtered_list1){
如果(!set1.add){
副本1.添加(s);
}
}
ArrayList duplicates2=新的ArrayList();
for(字符串s:filtered_list2){
如果(!set2.add){
副本2.添加(s);
}
}
已筛选的_list.addAll(重复项1);
过滤的_列表。添加全部(重复2);
ArrayList duplicates=新的ArrayList();
用于(字符串s:已筛选的\u列表){
如果(!set.add){
副本。添加;
}
}
返回副本;
}
可能有一种更简单的方法,但我还没有找到