Java程序对Collection <integer>中的正值进行计数

时间:2018-10-29 00:58:08

标签: java

我正在开发一个程序,用于计算整数Collection中的正值,并且有问题。我对Java有点陌生,想知道是否有人可以指出我出了问题的地方。

public class CountPositives {

/**
 * Returns the number of positive values in the given Collection.
 */
public static int countPositives(Collection<Integer> collection) {
 List<Integer> copy = new ArrayList(collection);
 int positive = 0; 
 Iterator<Integer> itr = copy.iterator();
 for (int i = 0; i < copy.size(); i++) {
         if (copy.get(i) > 0 ) {
             positive ++;
         }
 }
 return positive;     
 }
}

2 个答案:

答案 0 :(得分:1)

您的代码对我来说很好。 (尽管您有从未使用过的Iterator)。.

也许更简单的方法是:

return (int) copy.stream().filter(e -> e > 0).count();

将过滤掉所有非正数,然后返回它们的计数。您也可以简单地使用传递的Collection

public static int countPositive(Collection<Integer> collection) {
    return (int)collection.stream().filter(e -> e > 0).count();
}

这将消除副本List和多余的变量。


请注意,count()返回一个long。如果collection的大小可能超过int的限制,则需要将返回类型更改为long而不是强制转换为int

答案 1 :(得分:0)

您没有使用IteratorCollections can automatically give you an iterator,因此无需将其转换为ArrayList即可。

Iterator<Integer> itr = collection.iterator();

现在您实际上必须使用for语句对于初学者来说可能看起来很奇怪,但请记住,for语句以可选的初始化步骤开始,可以省略。

for(; itr.hasNext();) {
    Integer value = itr.next();
    // rest of your logic here
}

如果愿意,可以直接在for语句中初始化迭代器。

for(Iterator<Integer> itr = collection.iterator(); itr.hasNext();) {
    Integer value = itr.next();
    // rest of your logic here
}

尽管复制很浪费,但是代码似乎还不错。该代码的关键部分是检查是否存在正值,而您的代码确实完成了该操作。这只是使其变得更加干净和礼貌。