2017-05-30 61 views
1

我碰到了一个看不见的简单问题。基本上,我的列表保存了代表不同的项目的多个整数,这些项目工作正常,但我需要能够检查列表是否包含多次相同的整数,然后将它们从列表中删除。检查ArrayList是否包含多个相同的整数并将它们从列表中删除?

if (myList.contains(100)) { // I want to check if the int '100' exists in myList twice 
    myList.remove(new Integer(100)); // I want to remove the 2 aforementioned duplicate integers 
} 

道歉,如果我的解释不是最清楚的。提前致谢!

编辑:澄清,我希望列表包含重复,但我想能够检查重复是否存在X次,然后从列表中删除这些实例。

我可能希望只从列表中添加INT 100 7倍,再后来检查它是否存在两次,然后去除它2实例。

+1

可能的重复[如何从ArrayList中删除重复的元素?](https://stackoverflow.com/questions/203984/how-do-i-remove-repeated-elements-from-arraylist) – Tom

+0

该复制使用字符串,但它也适用于Integer。 – Tom

回答

0

您可以创建完成手头的任务的方法,沿此线的东西:

private static boolean removeSpecfiedNumber(int number,int numberOfTimes, List<Integer> integerList){ 
     if(integerList.stream().filter(x -> x == number).count() >= numberOfTimes){ 
      for (int i = 0; i < numberOfTimes; i++) { 
       integerList.remove((Integer)number); 
      } 
      return true; 
     } 
     return false; 
} 
  • 参数number是要检查它的出现即100在您的案件数量。
  • 参数numberOfTimes是您希望从列表中删除该元素的次数。
  • 参数integerList当然是您想从中删除元素的列表。

让我们下面的代码作为示例:

List<Integer> myList = new ArrayList<>(); 
myList.add(100); 
myList.add(200); 
myList.add(100); 
myList.add(100); 
myList.add(100); 
myList.add(100); 
myList.add(100); 
myList.add(100); 
removeSpecfiedNumber(100,2,myList); 
System.out.println(myList); 

这将从myList除去100两次,因此应该收率下面的元素:

[200, 100, 100, 100, 100, 100] 

方法返回类型如果需要,可以是void,但是,返回类型boolean有时可能派上用场,因此我使用了该方法。

此外,如果您正在处理对象,则无需使用static修饰符,因此您可以将其删除。

+0

感谢您的回答!我不想删除所有这些。我需要列表多次包含相同的整数,我只是需要在不同的场合检查'100'是否存在两次或更多次,然后只删除这些值。 – Temsei

+0

对不起,在完成之前意外发布了评论。编辑。 – Temsei

+0

所以你最多只需要一个'100'就可以保留并移除其余的? –

1

您可以使用不允许重复键的Set,例如

Set<Ineger> foo = new HashSet<>(myList); 

而且你可以创建一个新的List或使用它,因为它是。

0

1)myList.remove(new Integer(100));将只删除第一个等于100的事件。
您应该在remove()上循环,而列表仍包含具有相同值的对象。

2)要知道列表是否包含多个对象,可以使用indexOf()lastIndexOf()
如果这些不同,则表示您有多个元素。
所以要根据您的要求,您可以删除所有的人都在点1

Integer valueToCheck = 100; 
    if (myList.indexOf(valueToCheck) != myList.lastIndexOf(valueToCheck)) { 
     while (myList.contains(valueToCheck)){ 
      myList.remove(valueToCheck); 
     } 
    } 
0

描述启动Java 8,你可以在这样的方式使用Java流API的方法:

List<Integer> i = new ArrayList<Integer>(); 
    i.add(1); 
    i.add(2); 
    i.add(3); 
    i.add(1); 

List<Integer> collect = i.stream().distinct().collect(Collectors.toList()); 

注意:将创建新列表。

+0

哦,你也可以使用'i.stream()。collect(Collectors.toSet())' –

相关问题