[英]Java program that accepts int values until the user enters a zero, and then finds the minimum positive 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.