如果所有元素都为零,则Java清除List

时间:2016-06-21 17:22:06

标签: java list clear

我有名单。这将返回Web服务响应的一部分。如果列表中的所有值都为零,我想清除列表。

我已经用下面的代码来实现。但我正在寻找更好的解决方案。

i=0;
for (int element : myList) {
   if (element != 0)
        break;
    else
        i++;
}
if (myList.size()==i)
      myList.clear();

6 个答案:

答案 0 :(得分:2)

您可以将计数反转以使其更简单

int zero_elements = 0;
for (int element : myList) {
  if (element == 0) zero_elements++;
}
if (myList.size() == zero_elements) myList.clear();

更进一步,您可以像这样使用Collections.frequency()

if (Collections.frequency(myList, 0) == myList.size())
  myList.clear();

如果您愿意添加库和Java 8,第三种选择就是使用Guava这样

if (Iterables.all(myList, (int element) -> element == 0))
    myList.clear();

答案 1 :(得分:1)

您可以删除重复的值,然后只需检查列表中是否只包含1个值,等于0:

Set<Integer> noDuplicates = new HashSet<Integer>(myList);
if (noDuplicates.size() == 1 && noDuplicates.iterator().next() == 0) {
    myList.clear();
}

答案 2 :(得分:1)

如果您没有使用Lambdas,那么您可以使用Collections#frequency类,获取列表中零元素的频率,如果频率与列表大小相同,那么您可以清除它...

实施例

public static void main(String[] args) {
List<Integer> myList = new ArrayList<>();
myList.add(0);
myList.add(0);
myList.add(0);
myList.add(0);
myList.add(0);
// 5 elements all zeros

int occurrences = Collections.frequency(myList, 0);
if (occurrences == myList.size()) {
    myList.clear();
}

// 
// using Lambdas:
boolean areAllZero = myList.parallelStream().allMatch(i -> i == 0);
if (areAllZero) {
    myList.clear();
}
}

答案 3 :(得分:1)

我会选择:

private void clearIfContainsOnlyZeros(List<Integer> list){
    for(int value:list){
        if (value !=0){
            return;
        }
    }
    list.clear();
}

答案 4 :(得分:1)

您可以使用Java 8 Streams API ...

if (myList.stream().filter(i -> i != 0).count() == 0) {
    myList.clear();
}

检查任何非零值并获取计数。如果非零值的计数为零,则它们都必须为零。因此,清除清单。

或者,更好的 ......

if (myList.stream().allMatch(i -> i == 0)) {
    myList.clear();
}

另外......(给出k5 _&#39;以下评论)......

if (!myList.stream().filter(i -> i != 0).findFirst().isPresent()) {
    myList.clear();
}

答案 5 :(得分:0)

我有一个建议,但我不认为这是一个明智的方法,但你可以尝试一下。 您可以拥有一个初始化为某个值的标志,每次清除列表以及每次向列表中添加或删除项目时,都会根据项目的值相应地更改标志值。

例如,您可以拥有一个变量flag,其值最初为0.当您将项目插入列表时,(您必须编写一个单独的块,可能是一个方法,以插入将项目放入列表以检查项目的值并对标志进行更改)检查项目的值,如果值为0,则flag将更改为1。您可以避免上述循环来清除列表。