2016-12-08 3 views
-1

У меня есть список массивов ArrayList, который хранит объекты, которые хранят детали некоторых врачей. Каждый врач имеет уникальное поле идентификатора. Есть ли способ поиска по списку массивов для врача с определенным значением идентификатора?Поиск через ArrayList для поиска объекта с определенным значением поля

+0

Не могли бы вы разместить код, в котором вы создадите arraylist? Возможно, эти данные были бы лучше структурированы как словарь? – Stephopolis

+1

Похоже, вам было бы лучше хранить данные в «Map », который будет отображать идентификаторы врача в соответствующие объекты-врачи. Поиск станет элегантным и эффективным. –

ответ

0

Попробуйте что-нибудь подобное.

private static Doctor queryDoctorById(List<Doctor> doctors, int id) { 
    Doctor doctor = null; 
    for (Doctor doc : doctors) { 
     if (doc.id == id) { 
      doctor = doc; 
      break; 
     } 
    } 
    return doctor; 
} 

// is a sample object representing doctor 
protected static class Doctor { 
    public String name; 
    public int id; 
} 
+0

Я думаю, что буду использовать это, поскольку я понимаю, как это работает. Спасибо, парни. –

+0

ok но пожалуйста. не забудьте закрыть этот вопрос, если вы удовлетворены ответом – Olu

0

Простейшее, но, вероятно, не самое эффективное решение, я предполагаю, что вы создали «врачей» с сеттеры/добытчиками для всех полей, в противном случае вы бы использовать d.id вместо d.getId() но это не очень хорошая практика:

Я также предполагаю, что идентификатор может содержать буквы и цифры и представлен в виде строки. Если это число, вы бы использовать == вместо .equals

public Doctor findDoctorById(desiredID) { 
    for(Doctor d : doctors) { 
     if (d.getId().equals(desiredID) { 
      return d; 
     } 
    } 
    System.out.println("No doctors with that ID!"); 
    return null; 
} 
+0

Да, я использовал геттеры и сеттеры с частными значениями полей, поэтому я бы использовал d.getId(). Мои значения id являются int, поэтому я должен использовать == вместо «.equals» в правиле if корректно? –

+0

Да, это правильно. «==» - это точное равенство, например численное равенство, тогда как .equals - для сравнения двух строк. – mstorkson

2

Вы можете просто использовать потоки на ArrayList, как так:

Optional<Doctor> getUniqueDoctorById(List<Doctor> list, String id) { 

    return list.stream() 
      .filter(doctor -> doctor.getId().equals(id)) 
      .findFirst(); 
} 

Здесь вы видите потоковом список и фильтрации всех врачей где идентификатор врача равен идентификатору, который вы ищете.

Смежные вопросы