繁体   English   中英

用于计算集合中正值的 Java 程序<Integer>

[英]Java program to count positive values in a Collection<Integer>

我正在开发一个程序来计算整数集合中的正值并遇到问题。 我对 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;     
 }
}

你的代码对我来说很好用。 (尽管您有一个从未使用过的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

您没有使用Iterator Collection s 可以自动为您提供一个 iterator ,因此无需将其转换为ArrayList即可获得它。

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

现在您实际上必须使用它。 for初学者来说, 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
}

尽管进行了浪费性的复制,但代码看起来还不错。 代码的关键部分是检查是否存在正值,而您的代码确实做到了这一点。 这只是让它更干净,更不拘礼节。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM