Comprobar si un ID está contenido en una ArrayList

4,142 views
Skip to first unread message

Javier Hdez

unread,
Feb 1, 2012, 5:15:44 AM2/1/12
to desarrolladores-android
Hola,

Intentaba usar contains(Object o) de la API de Android para saber si
existe un dato en el ArrayList pero he intentado de varias maneras y
no lo he conseguido siempre me devuelve false, a ver si alguien me
puede decir donde está el error, este es el último intento que he
hecho donde hice un casting de la variable id de tipo long (pero sin
éxito):

Long lObj = new Long(id);
boolean existe = lista.contains(lObj);
if(existe == true){
Log.w(TAG, "El arrayList (lista) contiene el ID dado");
}


Saludos y gracias

Francisco José Hernández

unread,
Feb 1, 2012, 5:20:09 AM2/1/12
to desarrollad...@googlegroups.com

Puedes poner como estas metiendo los elementos en el arrayán lista?

--
Has recibido este mensaje porque estás suscrito al grupo "desarrolladores-android" de Grupos de Google.
Para publicar una entrada en este grupo, envía un correo electrónico a desarrollad...@googlegroups.com.
Para anular tu suscripción a este grupo, envía un correo electrónico a desarrolladores-a...@googlegroups.com
Para tener acceso a más opciones, visita el grupo en http://groups.google.com/group/desarrolladores-android?hl=es.

Javier Hdez

unread,
Feb 1, 2012, 5:33:48 AM2/1/12
to desarrolladores-android
Algo así,

if(existe == false){
Empleados e = new Empleados();
e.setID(id);
e.setNombre(nombre);
e.setApellidos(apellidos);

Luego el objeto e se lo paso a un adapter que es el encargado de
meterlo en la lista.

On 1 feb, 10:20, Francisco José Hernández <fjh...@gmail.com> wrote:
> Puedes poner como estas metiendo los elementos en el arrayán lista?

Francisco José Hernández

unread,
Feb 1, 2012, 5:38:28 AM2/1/12
to desarrollad...@googlegroups.com

Si metes el objeto e (instancia de empleado) en la lista tendrás que buscar un objeto instancia de empleadi

Francisco Martínez Espartero

unread,
Feb 1, 2012, 5:45:44 AM2/1/12
to desarrollad...@googlegroups.com
En el array hay empleados no id, para saber si ese id existe tendrás que recorrer el array e ir comprobando la id de cada empelado, usando un for, un if y un break para cuando lo encuentre.

for(empleado e:nArray){
    if(e.equals(id)){
     res = true;
    break;
    }
}

Yo lo haría así, no se si abra otra forma.

Francisco José Hernández

unread,
Feb 1, 2012, 5:45:55 AM2/1/12
to desarrollad...@googlegroups.com
Te puedes mirar de java el Collections.binarySearch si tienes la lista ordenada. Sino, creo que para buscar tendrás que hacerlo o con un foreach o ordenar antes.
--
Francisco José Hernández Hernández
Responsable de Informática y Comunicaciones
GRUPO CORORASA

Mauricio Montilla

unread,
Feb 1, 2012, 5:55:04 AM2/1/12
to desarrollad...@googlegroups.com
Si es un ArrayList de Empleados debes usar el indexOf, el cual te
retornara -1 (<0) si no está

http://docs.oracle.com/javase/1.5.0/docs/api/java/util/ArrayList.html#indexOf%28java.lang.Object%29

Juan de Dios Maldonado Sánchez

unread,
Feb 1, 2012, 5:55:44 AM2/1/12
to desarrollad...@googlegroups.com
Para que el lista.contains(objeto) funcione correctamente y encuentre un cierto objeto, tienes que hacer que sobrescribir el método equals(Object) en la clase del objeto que almacenas, que es lo que utiliza "contains" para comparar el objeto que buscas con los de la lista.

Algo más o menos así:

class Empleados {
    public boolean equals(Object other){
        return this.id == other.id;
    }
}

An'Brain - Prueba el nuevo widget inteligente para tu Android.
Idiotizer Free - Idiotiza a tus amigos. (Se requieren auriculares)
Track My App - Realiza un seguimiento de tus aplicaciones en el Android market.

Francisco Martínez Espartero

unread,
Feb 1, 2012, 5:57:57 AM2/1/12
to desarrollad...@googlegroups.com
Pero el indexOf te devuelve la posición del objeto del array, si busca un empleado si le dará la posición pero si busca un atributo del empleado, que yo sepa no lo encuentra, CREO.

Mauricio Montilla

unread,
Feb 1, 2012, 6:04:43 AM2/1/12
to desarrollad...@googlegroups.com
con la posición accedes al empleado que quieras y de este modo puedes
obtener cualquiera de sus atributos. Si es solo para saber si el
empleado está en lista: si la posición es menor a cero es porque no
está.

El día 1 de febrero de 2012 11:57, Francisco Martínez Espartero
<francisc...@gmail.com> escribió:

Juan de Dios Maldonado Sánchez

unread,
Feb 1, 2012, 6:08:42 AM2/1/12
to desarrollad...@googlegroups.com
Mauricio, si la clase Empleados no sobreescribe el método "equals", Ya utilices "contains", o"indexOf", el objeto no se encontrará, ya que lo que estás comparando son referencias a objetos, y no el contenido de los mismos. De ahí que para que la cosa funcione, tienes que indicar en la clase Empleados cómo compararlos entre sí.

Francisco José Hernández

unread,
Feb 1, 2012, 6:30:23 AM2/1/12
to desarrollad...@googlegroups.com
Aún así tendrías que pasarle a contains o al indexof una instancia del objeto Empleado, no podrías pasarle directamente el id 

Mauricio Montilla

unread,
Feb 1, 2012, 6:33:09 AM2/1/12
to desarrollad...@googlegroups.com
Llevas razón

El día 1 de febrero de 2012 12:08, Juan de Dios Maldonado Sánchez
<jua...@gmail.com> escribió:

Juan de Dios Maldonado Sánchez

unread,
Feb 1, 2012, 6:33:13 AM2/1/12
to desarrollad...@googlegroups.com
Yo creo que hasta ahí llegará.

Jc Miñarro

unread,
Feb 1, 2012, 9:39:54 AM2/1/12
to desarrollad...@googlegroups.com
Puede utilizar también un map, e insertar cada empleado 
asociado a su ID, de esta forma puede obtener el empleado
de una forma fácil y rápida.
Un saludo,
Jc Miñarro

-------------------------------------------------------------------------------------------
CarteleraApp - Consulta la cartelera y estrenos de los cines españoles.

Francisco Martínez Espartero

unread,
Feb 1, 2012, 10:36:49 AM2/1/12
to desarrollad...@googlegroups.com
o el for que puse

Juan de Dios Maldonado Sánchez

unread,
Feb 1, 2012, 10:53:55 AM2/1/12
to desarrollad...@googlegroups.com
No. El "for" no es tan elegante como hacerlo como se debe. :P

"Pensando en JAVA" <--- Un libro muy recomendable e interesante

Jc Miñarro

unread,
Feb 1, 2012, 11:31:59 AM2/1/12
to desarrollad...@googlegroups.com
Si java tiene "esas cosas" programadas, por qué empeñarse
en implementarlas desde cero...

Javier Hdez

unread,
Feb 1, 2012, 12:35:33 PM2/1/12
to desarrolladores-android
Gracias por las respuestas,

Había visto algunos de los métodos que comentan y también lo primero
que se me ocurrió fue el 'for' que es lo que se suele utilizar,
también estuve mirando listIterator pero me sonaba contains() y nunca
la había utilizado y lo estuve mirando y creo que es justamente lo que
necesito, que me devuelva true en caso de que exista el id.

No he tenido tiempo de tocar el código pero creo que sea eso lo que
comentan Francisco José y Juan de Dios

Lo que si sobreescribo equals en la clase Empleados, también tendré
que sobreescribir hasCode que estuve mirando el por qué y más o menos
lo entendí, aunque no me queda muy claro como implementarlo.

Effective Java 2nd Edition , a partir de la página 45.

Item 9:
Always override hashCode when you override equals

http://code.google.com/p/scjp-preparacion/downloads/detail?name=Effective%20Java%202nd%20Edition%20(May%202008).pdf

Saludos



Juan de Dios Maldonado Sánchez

unread,
Feb 1, 2012, 12:53:08 PM2/1/12
to desarrollad...@googlegroups.com
En tu caso, un empleado A es igual a otro empleado B si comparten el mismo ID. ¿No? Pues entonces tu función hashCode puede devolver el id del empleado. (En caso de ser el id de tipo distinto de int, lo truncas a (int))

--
Has recibido este mensaje porque estás suscrito al grupo "desarrolladores-android" de Grupos de Google.
Para publicar una entrada en este grupo, envía un correo electrónico a desarrollad...@googlegroups.com.
Para anular tu suscripción a este grupo, envía un correo electrónico a desarrolladores-a...@googlegroups.com
Para tener acceso a más opciones, visita el grupo en http://groups.google.com/group/desarrolladores-android?hl=es.

Javier Hdez

unread,
Feb 1, 2012, 1:09:45 PM2/1/12
to desarrolladores-android
En mi caso en otra cosa puse empleado por poner algo pero se entiende,
gracias

On 1 feb, 17:53, Juan de Dios Maldonado Sánchez <jua...@gmail.com>
wrote:
> En tu caso, un empleado A es igual a otro empleado B si comparten el mismo
> ID. ¿No? Pues entonces tu función hashCode puede devolver el id del
> empleado. (En caso de ser el id de tipo distinto de int, lo truncas a (int))
>
>
>
>
>
>
>
>
>
> On Wed, Feb 1, 2012 at 6:35 PM, Javier Hdez <droin...@gmail.com> wrote:
> > Gracias por las respuestas,
>
> > Había visto algunos de los métodos que comentan y también lo primero
> > que se me ocurrió fue el 'for' que es lo que se suele utilizar,
> > también estuve mirando listIterator pero me sonaba contains() y nunca
> > la había utilizado y lo estuve mirando y creo que es justamente lo que
> > necesito, que me devuelva true en caso de que exista el id.
>
> > No he tenido tiempo de tocar el código pero creo que sea eso lo que
> > comentan Francisco José y Juan de Dios
>
> > Lo que si sobreescribo equals en la clase Empleados, también tendré
> > que sobreescribir hasCode que estuve mirando el por qué y más o menos
> > lo entendí, aunque no me queda muy claro como implementarlo.
>
> > Effective Java 2nd Edition , a partir de la página 45.
>
> > Item 9:
> > Always override hashCode when you override equals
>
> >http://code.google.com/p/scjp-preparacion/downloads/detail?name=Effec...
>
> > Saludos
>
> > --
> > Has recibido este mensaje porque estás suscrito al grupo
> > "desarrolladores-android" de Grupos de Google.
> > Para publicar una entrada en este grupo, envía un correo electrónico a
> > desarrollad...@googlegroups.com.
> > Para anular tu suscripción a este grupo, envía un correo electrónico a
> > desarrolladores-a...@googlegroups.com
> > Para tener acceso a más opciones, visita el grupo en
> >http://groups.google.com/group/desarrolladores-android?hl=es.
>
> --
> An'Brain<https://market.android.com/details?id=com.nidrico.apps.anbrain.lite> -
> Prueba el nuevo widget inteligente para tu Android.
> Idiotizer Free<https://market.android.com/details?id=com.nidrico.apps.idiotizerfree>-
> Idiotiza a tus amigos. (Se requieren auriculares)
> Track My App<https://market.android.com/details?id=com.nidrico.apps.trackmyapp>-
Reply all
Reply to author
Forward
0 new messages