2012-04-18 31 views
28

¿Cómo puedo verificar si hay String en el List?Compruebe si una cadena está en un ArrayList de cadenas

Quiero asignar 1 a temp si hay un resultado, 2 en caso contrario.

Mi código actual es:

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

Por qué no acaba de establecer la temperatura a ser de 2 a principios? ¿Y por qué usar objeto entero en lugar de int? La solución se ve lo suficientemente buena si cambia lo que dije – tskulbru

+0

Lo que ha escrito ya es una solución de trabajo, excepto que le falta la instrucción else. También tenga en cuenta que la comparación de cadenas distingue entre mayúsculas y minúsculas, lo que podría ser un problema si no logra que funcione correctamente. Además, el uso de contiene como sugerido es otro enfoque válido –

+0

@JimmyGustafsson: sí hombre, estaba haciendo eso solo pero me confundí ... de todos modos gracias – abhi

Respuesta

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

El método 'List.contains()' verifica la identidad, no la igualdad. Funciona bien para enteros pero no para cadenas (que es lo que OP solicitó). Iterando sobre la lista, o mejor, usando Java8 List Stream es el camino a seguir para 'List ' – Michal

+4

@Michal la documentación indica lo contrario https://docs.oracle.com/javase/8/docs/api/java/util /List.html#contains-java.lang.Object- Comprueba la igualdad, no la identidad: "devuelve verdadero si y solo si esta lista contiene al menos un elemento e tal que' (o == null? E == null: o.equals (e)) '" – jazzytomato

+0

Tienes razón. Gracias por corregirme. – Michal

12

La interfaz List ya ha resuelto este.

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

más se pueden encontrar en la documentación sobre List.

+0

El método 'List.contains()' verifica la identidad, no la igualdad. Funciona bien para enteros pero no para cadenas (que es lo que OP solicitó). Iterando sobre la lista, o mejor, usando Java8 List Stream es el camino a seguir para 'List ' – Michal

+0

@Michal No es cierto ya que la documentación dice lo contrario (y acabo de probar). Pulse el enlace en mi respuesta y léalo usted mismo. –

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)); 

La salida es:

two 
five 
Cuestiones relacionadas