我是使用谓词的新手,不确定我是否正确理解了它。我有一个抽象的员工
类,其中每小时和薪水员工是分开创建的。我的问题依赖于我的员工redicate.java
类,我不确定如何检查它是否是每小时员工并返回真或假。
我需要为以下所有条件创建不同的谓词:
所有员工,仅每小时一次,仅限工资和全职。
到目前为止,我只是想先让“仅每小时”谓词正常工作,然后再找出剩下的谓词。我不确定在“p”后面加什么来检查它是哪种类型的员工。我目前拥有的是:
public static Predicate<Employee> isHourlyEmployee() {
return p -> p.
}
我还有一条语句,即double avgSalary=calculateAveragePay(employees,null)和我不确定用什么来替换null,因为它应该是基于上面main中我的calculateAveragePay函数的谓词。
主要的Java语言
package homework04;
import java.util.function.Predicate;
public class Main {
public static double calculateAveragePay(Employee[] employees, Predicate<Employee> pred) {
double sum = 0.0;
int count = 0;
for(Employee e : employees) {
if(!pred.test(e)) {
continue;
}
sum += e.calculatePay();
count++;
}
return sum / count;
}
public static void main(String[] args) {
//The list of employees to calculate.
Employee[] employees = {
new HourlyEmployee("John Smith", 80, 18.00),
new HourlyEmployee("Jane Doe", 77, 20.00),
new SalaryEmployee("Bob Miller", 85, 40000.00),
new HourlyEmployee("Alice Davis", 40, 12.50),
new SalaryEmployee("Frank Frink", 70, 35000.00),
new HourlyEmployee("Chris Williams", 95, 25.00)
};
//The average pay for both types of employee.
double avgSalary = calculateAveragePay(employees, null);
double avgHourly = calculateAveragePay(employees, null);
//The bonus to be added to employee pay.
//double bonus = Math.abs(avgSalary - avgHourly);
//Print the average pay
System.out.println("===== Average Pay =====");
}
}
Employee.java
package homework04;
import java.util.function.Predicate;
abstract class Employee {
private String name;
private int hoursWorked;
public Employee(String name, int hoursWorked) {
this.name = name;
this.hoursWorked = hoursWorked;
}
public int getHoursWorked() {
return hoursWorked;
}
public String getName() {
return name;
}
public abstract double calculatePay();
}
小时mployee.java
package homework04;
public class HourlyEmployee extends Employee {
private double hourlyPay;
public HourlyEmployee(String name, int hoursWorked, double hourlyPay) {
super(name, hoursWorked);
this.hourlyPay = hourlyPay;
}
@Override
public double calculatePay() {
return getHoursWorked() * hourlyPay;
}
}
工薪员工。Java语言
package homework04;
public class SalaryEmployee extends Employee {
private static final int NUM_PAY_PERIODS = 26;
private double salary;
public SalaryEmployee(String name, int hoursWorked, double salary) {
super(name, hoursWorked);
this.salary = salary;
}
@Override
public double calculatePay() {
return salary / NUM_PAY_PERIODS;
}
}
员工预测。Java语言
package homework04;
import java.util.function.Predicate;
public class EmployeePredicate {
public static Predicate<Employee> isHourlyEmployee() {
return p -> p.
}
}
您正在寻找:
return p -> p instanceof HourlyEmployee;
但我不建议在工厂类中为每个类型的员工创建谓词,而是在调用calculateAveragePay方法时传入行为,即。
double avgSalary = calculateAveragePay(employees, p -> p instanceof SalaryEmployee);
double avgHourly = calculateAveragePay(employees, p -> p instanceof HourlyEmployee);
然而,如果您想继续使用谓词方法的工厂类,因为您觉得它提供了更好的可读性,那么您可以执行以下操作:
public class EmployeePredicate {
public static Predicate<Employee> isHourlyEmployee() {
return p -> p instanceof HourlyEmployee;
}
}
然后该方法调用calculateAveragePay成为:
double avgSalary = calculateAveragePay(employees, EmployeePredicate.isSalaryEmployee()); // create the isSalaryEmployee method
double avgHourly = calculateAveragePay(employees, EmployeePredicate.isHourlyEmployee());
另一方面,您可以使用流API执行calculateAveragePay,使其更具可读性。
public static double calculateAveragePay(Employee[] employees, Predicate<Employee> pred) {
return Arrays.stream(employees)
.filter(pred)
.mapToDouble(e -> e.calculatePay())
.average().orElse(0);
}
企业中不同职位、不同职级、不同场景下都会有不同的用车制度,系统支持按照不同场景配置制度,并且支持每个员工拥有不同制度。 配置方法 1、单个员工配置 选择需要配置员工 选择该员工适用的企业支付制度 2、批量配置 批量为员工匹配制度有两种方式: 在界面中直接操作和上传员工的手机号码进行编辑。 ①在界面中直接操作 从界面中筛选出需要操作的员工,点击编辑 对选定的员工设置权限 可对选中的员工进行增加、移
对于下面的代码,我得到了不同的输出 输出为: 现在美国/洛杉矶是GMT-8/UTC-8或PST。但当我将参数从GMT-8改为America/Los_Angeles时, 输出为: 不能使用类似PST的缩写,因为它已被弃用。同时,CST可以指中央标准时间和中国标准时间。 我的输入是-8、-9-14等,我希望在GMT/UTC之前知道我是否可以在给定日期获得DST激活。 请在这方面指导我。
想象一下下面的scanario:我有一个程序,它要求输入一个整数,然后是一个String输入。 根据aobe代码,我没有机会输入姓名。因此,通常我会声明2个扫描仪对象,如下所示: 我的问题是:有必要声明多个扫描仪对象来接受不同类型的输入吗??我这样做是正确的吗? 我已经考虑这个问题很多年了。(SO中的几个问题提到了多扫描仪,但他们的问题只使用了一个扫描仪对象,所以我今天问这个问题。)
假设我有一个抽象类Product,我还有两个实体用不同的字段扩展它:ProductA和ProductB。我正在使用Product repository,使用Specification和SpecificationBuilder,并使用一些常用字段来搜索它们。我想完成的是检测它是什么类型的产品(A或B),并在此基础上使用不同的搜索查询。 例如,ProductA有库存,ProductB有功能,因此如果我
我需要编写一个java方法来从一个对象中获取特定的信息。但是,该对象可以是A类型的,也可以是B类型的。下面是我的代码的一部分: 当我这样写它时,它会引发一个错误,说“重复方法”。我怎么才能让这个起作用?
我总共有三个活动,我正在为每个活动实现admob,每个活动都有自己的横幅,当活动被改变时,另一个活动挂了一点,因为广告加载在后台,是否有任何方法,一个横幅出现在所有活动时,切换,以避免延迟。