我如何在其他ArrayList中传输重复的项目?

时间:2017-06-11 17:54:12

标签: java android arraylist

我有一个数组列表

ArrayList<String> list=new ArrayList<String>();
  list.add("Apple"); 
  list.add("Ball");  
  list.add("Ball");  
  list.add("Cat");  
  list.add("Cat");  
  list.add("dog");  

我希望将重复的字符串传输到其他ArrayList。

我的意思是第二个数组列表应该只包含Ball和Cat而不是Apple和dog。

感谢任何形式的帮助。

5 个答案:

答案 0 :(得分:5)

你可以这样做:

return duplicateList.stream().distinct().collect(Collectors.toCollection(ArrayList::new));

List<String> duplicates = new ArrayList<String>(); for(String str: list) { if(Collections.frequency(list, str) > 1) { duplicates.add(str); } } 将包含您的副本

答案 1 :(得分:3)

您可以使用find_package( OpenCV REQUIRED HINTS "my/path/to/share/OpenCVConfig.cmake") 作为帮助确定重复元素的方法,然后只返回Set个元素。

ArrayList

像这样调用方法:

public static ArrayList<String> retainDuplicates(ArrayList<String> inputList){
       Set<String> tempSet = new HashSet<>();
       ArrayList<String> duplicateList =  new ArrayList<>();
       for (String elem : inputList) {
            if(!tempSet.add(elem)) duplicateList.add(elem);
       }
       return duplicateList.stream().distinct().collect(Collectors.toCollection(ArrayList::new));
}

请注意,我已使用ArrayList<String> resultList = retainDuplicates(list); 删除distinct()内多次出现的所有元素。但是,如果您想保留重复项而不管duplicateList中的重复项,那么只需执行duplicateList而不是return duplicateList;

答案 2 :(得分:3)

试试这个:

// Custom list to ensure that one duplicate gets added to a list at most as
// opposed to n-1 instances (only two instances of a value in this list would 
// be deceiving).
List<String> list = new ArrayList<>();
list.add("Apple");
list.add("Ball");
list.add("Ball");
list.add("Ball");
list.add("Ball");
list.add("Cat");
list.add("Cat");
list.add("Cat");
list.add("dog");
list.add("dog");

Set<String> set = new HashSet<>();
Set<String> setOfDuplicates = new HashSet<>();
for (String s : list) {
    if (!set.add(s)) { // Remember that sets do not accept duplicates
        setOfDuplicates.add(s);
    }
}

List<String> listOfDuplicates = new ArrayList<>(setOfDuplicates);

答案 3 :(得分:2)

既然你说你的副本都是彼此相邻的,你可以成对地遍历列表,如果对的元素匹配,则有重复的

这里将是它的一般伪代码

int first = 0
int second = 1
for (arraySize)
    if (array[first] == array[second])
       //there is a match here
       newArray.add(array[first])
    first += 1
    second += 1

请注意,这不会检查数组的边界,这应该很容易实现

现在,对于没有重复项目的第二个列表,您可以简单地存储一个带有最后一个转移项目的变量,如果新发现的重复项是相同的,则不要再次转移它

答案 4 :(得分:1)

ArrayList<String> list=new ArrayList<String>();
  list.add("Apple"); 
  list.add("Ball");  
  list.add("Ball");  
  list.add("Cat");  
  list.add("Cat");  
  list.add("dog");

List<String> duplicateList= new ArrayList<String>();
for(String str: list) {
   if(Collections.frequency(list, str) > 1) {
       duplicateList.add(str);
   }
}

System.out.println(duplicateList.toString());
//Here you will get duplicate String from the original list.