2015-03-23 4 views
0

Я получил мой класс с конструктором:Java - поиск строки в ArrayList объектов

public Dane(String Imie, String Nazwisko, String nrTelefonu, int licznik) 
{ 
    this.id.Imie = Imie; 
    this.id.Nazwisko = Nazwisko; 
    this.id.nrTelefonu = nrTelefonu; 
    this.id.licznik = licznik; 

} 

и ArrayList этих объектов ...

static List<Dane> listaOsob = new ArrayList<Dane>(); 

в данный момент я ищу, используя что-то вроде это:

for(int i=0;i<listaOsob.size();i++) 
        { 
         if ((listaOsob.get(i).id.Imie).equals("Krzysiek")) 
          { 
           listaOsob.get(i).opis(); 
          } 
        } 

Итак ... Я знаю, как искать, когда кто-то дает мне полное имя, фамилию или номер телефона ... но Я хотел бы, чтобы поиск всегда так:

Введите текст для поиска: KRZ

так было бы найти Кшиштоф Марецки 700700700 Krzysiek Fraczak 500500500'

и т.д. и т.п.

Как может Я делаю это?

ответ

1
Dane d = listaOsob.get(i) 
    if(d.id.Imie.contains(searchTxt) || d.id.Nazwisko.contains(searchTxt) || 
     nrTelefonu.contains(searchTxt)|| licznik.toSring().contains(searchTxt)){ 
     listaOsob.get(i).opis(); 
    } 

Или вы можете написать метод ToString для класса Дане и чем проверить это следующим образом:

Dane d = listaOsob.get(i) 
d.toString().contains(searchTxt) 
+0

Это работает, глупо меня, я думал, что это будет сложнее, спасибо! – arienn

1

Я бы выбрал новую функциональную нотацию Java 8, это более простой, элегантный, и это тенденция к будущему языка.

// если вы хотите только первый результат этого поиска

Dave dave = listaOsob.stream().filter((d) -> d.getId().getImie().equals("textSearch")).findFirst().get(); 

// если вы хотите получить список результатов этого поиска

Collection<Dave> daves = listaOsob.stream().filter((d) -> d.getId().getImie().equals("textSearch")).collect(Collectors.toList()); 

// если вы хотите просто знать если он существует

boolean matchedResult = listaOsob.stream().anyMatch((d) -> d.getId().getImie().equals("textSearch")); 
Смежные вопросы