Как организовать поиск по полям класса в java?
Есть код на java:
worker.java
package com.company;
public class Worker {
public String name = "Default";
public int age;
public int salary;
public void setName(){ this.name = name; }
public String getName(){
return name;
}
public void setAge(){
this.age = age;
}
public int getAge(){
return age;
}
public void setSalary(){ this.salary = salary; }
public int getSalary(){
return salary;
}
}
worker1.java
package com.company;
public class Worker1 extends Worker{
public void checkAge(){
if (age > 0 && age < 100) {
this.age = age;
}
System.out.println(age);
}
}
main.java
public class Main {
public static void main(String[] args) {
Worker2 firstWorker = new Worker2();
firstWorker.salary = 12000;
firstWorker.age = 25;
firstWorker.name = "Ivan";
Worker2 secondWorker = new Worker2();
secondWorker.salary = 9800;
secondWorker.age = 22;
secondWorker.name = "Sergey";
Worker2 thirdWorker = new Worker2();
thirdWorker.salary = 54000;
thirdWorker.age = 48;
thirdWorker.name = "Artem";
}
}
worker2.java
package com.company;
public class Worker2 extends Worker1{
public void checkSalary(){
if (salary > 0) {
System.out.println("Зарплата " + name + " - положительное число");
} else System.out.println("Зарплата " + name + " - отрицательное число");
if (salary > 12038) {
System.out.println("Зарплата " + name + " выше прожиточного минимума");
} else System.out.println("Зарплата " + name + " ниже прожиточного минимума");
if (salary < 100000) {
System.out.println("Зарплата " + name + " ниже предельного числа");
} else System.out.println("Зарплата " + name + " выше предельнего числа");
}
}
Задание: Обеспечить возможность поиска в списке по различным полям (имя. возраст, диапазон зарплат). Не могу реализовать это, не подскажете, как сделать?
Ответы (1 шт):
что-то у вас все плохо, включая даже сеттеры)) попробуйте так:
public class Worker {
private final String name;
private final int age;
private final int salary;
public Worker(String name, int age, int salary) {
this.name = name;
this.age = age;
this.salary = salary;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public int getSalary() {
return salary;
}
@Override
public String toString() {
return "Worker{" + "name=" + name + ", age=" + age + ", salary=" + salary + '}';
}
}
import java.util.Collection;
import java.util.List;
import java.util.stream.Collectors;
public class WorkerSearcher {
private String name;
private Integer minAge;
private Integer maxAge;
private Integer minSalary;
private Integer maxSalary;
public WorkerSearcher setName(String name) {
this.name = name;
return this;
}
public WorkerSearcher setMinAge(Integer minAge) {
this.minAge = minAge;
return this;
}
public WorkerSearcher setMaxAge(Integer maxAge) {
this.maxAge = maxAge;
return this;
}
public WorkerSearcher setMinSalary(Integer minSalary) {
this.minSalary = minSalary;
return this;
}
public WorkerSearcher setMaxSalary(Integer maxSalary) {
this.maxSalary = maxSalary;
return this;
}
public List<Worker> search(Collection<Worker> workers) {
return workers.stream()
.filter(worker->name == null || worker.getName().equals(name))
.filter(worker->rangeOf(worker.getAge(), minAge, maxAge))
.filter(worker->rangeOf(worker.getSalary(), minSalary, maxSalary))
.collect(Collectors.toList());
}
private boolean rangeOf(Integer value, Integer min, Integer max) {
if (min==null && max==null) return true;
if (min!=null && max==null && min<=value) return true;
if (max!=null && min==null && max>=value) return true;
if (max!=null && min!=null && max>=value && min<=value) return true;
return false;
}
}
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Worker> workers = new ArrayList<>();
workers.add(new Worker("Ivan", 25, 12000));
workers.add(new Worker("Sergey", 22, 9800));
workers.add(new Worker("Artem", 48, 54000));
List<Worker> result = new WorkerSearcher()
.setMinSalary(10000)
.setMaxAge(40)
.search(workers);
System.out.println(result);
}
}
Класс WorkerSearcher одновременно является шаблоном для поиска и поисковиком. Вы создаете экземпляры данного класса и добавляете все условия поиска, после чего вызываете метод search, передавая в аргументы коллекцию, по которой хотите выполнить поиск. Возвращается вам коллекция уже отфильтрованная (результаты поиска). В примере я ищу работников с минимальной зарплатой 10000 и максимальным возрастом 40 и результат вывожу в консоль. Не очень практично, но для учебного примера вполне...