Поиск в объекте

219
27 февраля 2018, 05:29

Всем привет. Такой вопрос. У меня простая задача. Создать класс данных о человеке (любых). В этот класс отправляются данные(String/int/boolean) через конструктор. У меня задача организовать поиск людей по имени или по возрасту. И выдать где совпало. Реализация в отдельном методе. Как решить проблему ? Создать многомерный массив и запустить данные? Соответственно int заранее перевести в String?

public class Patient {
private String name;
private String secondName;
private String diagnosis;
private int age;
private boolean stateOfHealth; // true - здоров

Patient(String secondName, String name, String diagnosism, int age, boolean stateOfHealth) {
    this.secondName = secondName;
    this.name = name;
    this.diagnosis = diagnosis;
    this.age = age;
    this.stateOfHealth = stateOfHealth;
}
public void information() {
    System.out.println("Фамилия пациента: " + secondName);
    System.out.println("Имя пациента: " + name);
    System.out.println("Диагноз: " + diagnosis);
    System.out.println("Возрост: " + age);
    if (stateOfHealth)
    System.out.println("Состояние: здоров");
    else System.out.println("Состояние: нездоров");
}
String getSecondName() {
    return secondName;
}
int getAge() {
    return age;
}
public void seek(int i) {
}
public void seek(String str) {
}

}

Answer 1

Нельзя искать пациентов в классе пациент. В этом классе есть информация только об одном пациенте. Искать нужно в классе "Список пациентов"

class PatientList extends ArrayList<Patient> {
  // Ищем пациента, удолетворяющего некторому критерию
  private Patient search(Predicate<Patient> test) {
    for (Patient p : this) {
      if (test.test(p))  // проверяем критерий
        // если удовлетворяет - возвращаем найденный объект
        return p;
    }
    // если ничего не нашли, вернем null
    return null;
  }
  public Patient searchByAge(int age) {
    return search((p) -> return p.getAge() == age);
  }
  public Patient searchBySecondName(String secondName) {
    return search((p) -> return p.getsecondName().equals(secondName));
  }
}

Работа

// Создаем список пациентов
PatientList list = new PatientList();
// Заполняем его
list.add(new Patient(......));
list.add(new Patient(......));
...........
list.add(new Patient(......));
..........
// Ищем по возрасту 21 год
Patient p = list.searchByAge(21);
if (p != null)  // если нашли - выводим информацию
  p.information();
else
  System.out.println("Nothing");
Answer 2

Можно сделать просто:

public class Patient {
private static ArrayList<Patient> allPatients = new ArrayList<Patient>();
private String name;
private String secondName;
private String diagnosis;
private int age;
private boolean stateOfHealth; // true - здоров

public Patient(String secondName, String name, String diagnosism, int age, boolean stateOfHealth) {
    this.secondName = secondName;
    this.name = name;
    this.diagnosis = diagnosis;
    this.age = age;
    this.stateOfHealth = stateOfHealth;
    allPatients.add(this);
}
 public static ArrayList<Patient> getAllPatients() {
    return allPatients;
}

public static ArrayList<Patient> seek(int age) {
    ArrayList<Patient> chosenPatients = new ArrayList<Patient>();
    for (Patient patient: allPatients) {
        if(patient.age == age){
            chosenPatients.add(patient);
        }
    }return chosenPatients;
}
public static ArrayList<Patient> seek(String str) {
    ArrayList<Patient> chosenPatients = new ArrayList<Patient>();
    for (Patient patient: allPatients) {
        if(patient.name.equals(str)){
            chosenPatients.add(patient);
        }
    }return chosenPatients;
}
READ ALSO
Можноли через Exchanger передать данные в ui поток?

Можноли через Exchanger передать данные в ui поток?

Добрый день , углубляю знания и вот подумал а возможноли в Android передать данные из потока созданного через Thread Runnable в ui поток ?Ведь посути exchager...

224
Fxml controller, событие на checkbox

Fxml controller, событие на checkbox

Столкнулся с проблемой в самом неожиданном местеСоздана форма путем sceneBuilder и FXML и FXMLController

233
Условие локализации

Условие локализации

Приложение поддерживает несколько языков, однако на одном из языков есть дополнительные функции, для этого требуется сделать условие, что...

234
Как легко проверить метод на наличие аннотации?

Как легко проверить метод на наличие аннотации?

У меня есть объект method класса Method и аннотация MyAnnotationК сожалению, не нашел в объекте method метод вроде hasAnnotation

194