从可迭代集合中删除最小值和最大值

时间:2014-06-13 11:05:23

标签: java iterator

我的方法看起来像

public double calculator(Iterable<Integer> userRating)

我试图实现消除最高和最低值并计算平均值的逻辑。最终结果应该是(删除分钟-2和最大15)

public void ProperlyCalculates() {
        List<Integer> ratings = new ArrayList<Integer>();
        ratings.add(-2);
        ratings.add(-2);
        ratings.add( 3);
        ratings.add( 7);
        ratings.add( 8);
        ratings.add( 9);
        ratings.add(15);
        ratings.add(15);
        ratings.add(15);
        double rating = rater.getMovieRating(ratings);
        assertEquals(6.75D, rating, 0.0000001D);

我迷惑自己试图创建一个迭代器,我可以循环并添加我的逻辑。到目前为止我已经尝试过。

public double getMovieRating(Iterable<Integer> userRating) {


        Iterator ratings = userRating.iterator();
        int min = Integer.MIN_VALUE;
        int max = Integer.MAX_VALUE;

        while (ratings.hasNext()) {
            Integer val = ratings.next();
            if (val > max){ max = val;}
            if (val < min) {min = val;}  

        }

    }

但是Integer val = ratings.next()会引发incompatible type错误。我怎样才能遍历迭代器中的所有值?这是一个需要私人内部课程的情况吗?

2 个答案:

答案 0 :(得分:2)

有两种方法可以解决此问题。为Iterator提供类型,如此

Iterator<Integer> ratings = userRating.iterator(); // An iterator of type Integer

或将iterator.next()返回的值转换为Integer,如此

Integer val = (Integer) ratings.next();

在第一种情况下,您确保Iterator返回的每个元素都只是Integer类型。在第二种情况下,您将值转换为Integer,因为默认情况下,没有类型的Iterator会返回Object

答案 1 :(得分:1)

除了@ R.J所说的,你还应该考虑使用for:next语法,因为它使这更简单:

public double getMovieRating(Iterable<Integer> userRating) {

    int min = Integer.MIN_VALUE;
    int max = Integer.MAX_VALUE;

    for(Integer rating : userRating) {
        final int val = rating.intValue();
        if (val > max){ max = val;}
        if (val < min) {min = val;}  
    }
}