Java - Попытка вычислить среднее значение, полученное от геттера - PullRequest
1 голос
/ 24 октября 2019

Я работаю над приложением Java.
Существует метод Getter, соответствующий целочисленному полю (оценка).
Моя цель - рассчитать среднее значение для этого поля. Я решил создать массив, а затем рассчитать количество и сумму этого массива.
Но я действительно застрял как в синтаксисе Java, так и в «состоянии ума» ..

Вотмой фрагмент:

    public void setPersonData2(List<Person> persons2) {
        // Try to make a count of the array
        int[] scoreCounter = new int[100]; // 100 is by default since we don't know the number of values
        for (Person p : persons2) {
            int score = p.getScoreTheo(); // Getter
            Arrays.fill(scoreCounter, score);
            // Try to delete all values equal to zero
            int[] scoreCounter2 = IntStream.of(scoreCounter).filter(i -> i != 0).toArray();
            // Calculate count
            int test = scoreCounter2.length;
            System.out.println(test);
        } 
}

Не могли бы вы мне помочь?

Ответы [ 3 ]

4 голосов
/ 24 октября 2019

Почему слишком сложно вычислить простое среднее? Более того, я не понимаю, зачем вам вообще нужен массив.

int count = 0;
int sum = 0;
for (Person p : persons2) {
   ++count;
   sum += p.getScoreTheo();
}

double average = sum / (double)count;
2 голосов
/ 24 октября 2019

Использование потоков:

public void setPersonData2(List<Person> persons2) {
    double average = persons2.stream().mapToInt(p -> p.getScoreTheo()).average().getAsDouble();
    //[...]
}

Возникает NoSuchElementException для пустого списка.

1 голос
/ 24 октября 2019

Stream API имеет встроенную функцию для усреднения.

double average = persons2.stream().collect(Collectors.averagingInt(person -> person.getScore()));
...