Я пишу приложение для развлечения, включающее получение среднего значения из массива и использование DoubleStream и DoublePredicate для фильтрации, а затем подсчет выше и ниже расчетного среднего. Вот код ниже. Почему мой внутренний класс несовместим с DoublePredicate?
ошибка Средняя зарплата сотрудника: 23914.0 Исключение в потоке «main» java .lang.ClassCastException: EmployeeRecord $ GreaterThanSalary несовместимо с java .util.function.DoublePredicate в EmployeeRecordDriver.calculateGreaterThanLessThanSalary (EmployeeRecordDriver. java: 24) в EmployeeRecordDriver.main (EmployeeRecordDriver. java: 13)
1008
1007 *1007* EmployeeRecordDriver. java
import java.util.Arrays;
import java.util.function.DoublePredicate;
import java.util.stream.DoubleStream;
public class EmployeeRecordDriver {
private static double salary[] = {23500.0, 25080.0, 28760.0, 22340.0, 19890.0};
private static EmployeeRecord record;
public static void main(String args[]) {
System.out.println("The average salary of the employee is: " + findAverage(salary));
System.out.println("The number of employees having a salary greater than the average is: " + calculateGreaterThanLessThanSalary(salary) ); // line 13
// System.out.println("The number of employees having a salary less than the average is: " + calculateLessThanLessThanSalary(salary) );
}
public static double findAverage(double[] salary) {
record = new EmployeeRecord(0.0, salary);
return record.averageSalary;
}
public static int calculateGreaterThanLessThanSalary(double salary[]) {
int info[] = new int[2];
info[0] = (int)Arrays.asList(salary).stream().flatMapToDouble(element -> DoubleStream.of(element)).filter((DoublePredicate) record.gts).count(); // line 24
return info[0];
}
}
EmployeeRecord. java
import java.util.Arrays;
import java.util.function.Predicate;
import java.util.stream.DoubleStream;
public class EmployeeRecord{
double averageSalary = 0.0;
double[] salary = new double[5];
GreaterThanSalary<Double> gts = new GreaterThanSalary<>();
public EmployeeRecord(double averageSalary, double[] salary) {
super();
this.averageSalary = this.calculateAverage(salary);
this.salary = salary;
}
public double calculateAverage(double salary[]) {
double sum = Arrays.asList(salary).stream().flatMapToDouble(num -> DoubleStream.of(num)).sum();
return sum/salary.length;
}
public class GreaterThanSalary<DoublePredicate> implements Predicate<Double>{
@Override
public boolean test(Double d) {
return d > averageSalary;
}
}
}