我有一个数组列表
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。
感谢任何形式的帮助。
答案 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.