2012-04-18 17 views
28

Jak mogę sprawdzić, czy jest tam String w List?Sprawdź, czy ciąg jest w ArrayList ciągów

Chcę przypisać 1 do temp, jeśli istnieje wynik, 2 w przeciwnym razie.

Mój obecny kod jest:

Integer temp = 0; 
List<String> bankAccNos = new ArrayList<String>();//assume list contains values 
String bankAccNo = "abc"; 
for(String no : bankAccNos) 
    if(no.equals(bankAccNo)) 
     temp = 1; 
+0

Dlaczego nie wystarczy ustawić temp być 2 na początku? I dlaczego używać obiektu Integer zamiast int? Rozwiązanie wygląda na wystarczająco dobre, jeśli zmienisz to, co powiedziałem. – tskulbru

+0

To, co napisałeś, jest działającym rozwiązaniem, z tą różnicą, że brakuje ci instrukcji else. Zwróć też uwagę, że porównywanie ciągów uwzględnia wielkość liter, co może stanowić problem, jeśli nie sprawdzisz, czy działa poprawnie. Ponadto, korzystając zawiera jak sugerował to kolejny ważny podejście –

+0

@JimmyGustafsson: tak człowiek byłem doin, że tylko ale mam mylić ... każdym razie dzięki – abhi

Odpowiedz

44
temp = bankAccNos.contains(no) ? 1 : 2; 
+0

Metoda 'List.contains()' sprawdza tożsamość, a nie równość. Działa dobrze dla liczb całkowitych, ale nie dla łańcuchów (o co prosił OP). Iteracja nad listy, albo lepiej, za pomocą strumienia Java8 liście jest droga do '' Lista Michal

+4

@Michal dokumentacji stanowi inaczej https://docs.oracle.com/javase/8/docs/api/java/util /List.html#contains-java.lang.Object- sprawdza równości, a nie tożsamość: "zwraca true tylko wtedy, jeśli ta lista zawiera co najmniej jeden element e takie, że' (o == null e ==? null: o.equals (e)) '" – jazzytomato

+0

Masz rację. Dzięki za poprawienie mnie. – Michal

12

Interfejs List już ma to rozwiązane.

int temp = 2; 
if(bankAccNos.contains(bakAccNo)) temp=1; 

Więcej można znaleźć w dokumentacji dotyczącej List.

+0

W 'List.contains()' sprawdza metoda dla tożsamości, nie równość. Działa dobrze dla liczb całkowitych, ale nie dla łańcuchów (o co prosił OP). Iteracja nad listy, albo lepiej, za pomocą strumienia Java8 liście jest droga do '' Lista Michal

+0

@Michal Nieprawda jako dokumentacja mówi inaczej (i właśnie testowane). Naciśnij link w mojej odpowiedzi i czytaj sam. –

0
List list1 = new ArrayList(); 
    list1.add("one"); 
    list1.add("three"); 
    list1.add("four"); 

    List list2 = new ArrayList(); 
    list2.add("one"); 
    list2.add("two"); 
    list2.add("three"); 
    list2.add("four"); 
    list2.add("five"); 


    list2.stream().filter(x -> !list1.contains(x)).forEach(x -> System.out.println(x)); 

Wyjście jest:

two 
five 
Powiązane problemy