Título: como puedo ordenar 2 arraylist ? Publicado por: holamega12 en 13 Febrero 2015, 17:08 pm Hola, estoy haciendo una pequeña practica, tengo 2 arraylist, por ejemplo
ArrayList<Persona> Pmayor = new ArrayList(); y luego ArrayList<Persona>Pmenor = new ArrayList(); digamos que estos 2 arraylist los tengo detro de una clase, llamada GestionPersonas he buscado por internet, y para ordenar, debo implementar la interface comparator, si la he implementado en la clase Persona eso si lo entiendo A parte, tambien me han dicho que debo que cree un ArrayList temporal, para almacenar dichos objetos en uno, y luego ordenarlos por orden alfabetico, el problema, es que cuando los ordeno y muestro por pantalla, se van duplicando por pantalla por ejemplo, si tengo de nombres Pedro Ana cada vez que llamo a la funcion de ordenar y luego mostrar se duplican y asi sucesivamente, si le doy a ordenar por nombre Ana Pedro Ana Pedro ¿como soluciono el error? gracias Código
Título: Re: como puedo ordenar 2 arraylist ? Publicado por: 3n31ch en 13 Febrero 2015, 19:39 pm Buenas amigo, por lo que entiendo quieres ordenar personas, de menor a mayor, y de mayor a menor. (En el siguiente ejemplo, ordeno de menor a mayor por edad, y luego hago lo mismo por nombre, después de mayor a menor por nombre ^^)
Clase Persona: Código
MainClass (En donde se ordena todo): Código
La magia ocurre acá: Código
Exacto, como dices es necesario redefinir Comparator, usualmente esto se hace con números, pero si haces .getName().charAt(0) y lo casteas a int, obtendrás el código ascci y podrás ordenar los nombres mediante a su primera letra (primero mayusculas luego minusculas). Esto lo podrías mejorar si también comparas por la segunda letra..., pero eso te lo dejo a ti. Lo único diferente entre mayor y menor || menor y mayor, seria que cambio la posición de la variable person1 y person2. Si quiero que sea de menor a mayor pongo person1 compareTo person2, pero si quiero de mayor a menor pongo person2 compareTo person1. Por cierto, no me preocupe de leer tu codigo porque no utilizaste las etiquetas Code. Para hacer esto modifica tu mensaje, selecciona el codigo y en el combobox que dice GeSHi, pon Java. Recuerdalo para la proxima :P Si solo buscas ordenar para imprimir, y no quieres modificar el ArrayList, te recomendaría que la solución mas fácil es crear un ArrayList en un método y copiar el contenido del real. Luego ordenar tu ArrayList nuevo e imprimir con un foreach. Suerte ^^ Título: Re: como puedo ordenar 2 arraylist ? Publicado por: holamega12 en 14 Febrero 2015, 11:33 am gracias por contestar, no tengo problemas con ordenar un ArrayList, el problema, lo tengo, cuando tengo 2 ArrayList, en el que creo un tercer ArrayList, donde guardo el contenido de los 2 primeros, y llamo el metodo para ordenarlos, me ordena correctamente, el problema, es que por pantalla, cada vez que llamo a la funcion, es como si se duplicasen o añadiesen 2 veces, los nombres que he metido en el tercer ArrayList he estado buscando, y he leido, que el tercer ArrayList donde guardo, los 3 ArrayList, no es temporal.... ¿como hago un ArrayList temporal? Título: Re: como puedo ordenar 2 arraylist ? Publicado por: robertofd1995 en 14 Febrero 2015, 12:59 pm A ver hay dos clases de variables que se pueden declaran , globales y locales :
Las globales se declaran en la clase y se pueden acceder en cualquier parte de la clase. Las locales son aquellos que se declaran dentro de un metodo , al acabar ese metodo la variable creada desaparece. Supongo que es con eso con lo que estas liado. para hacer el arrayList temporal seria algo asi: Código: Pseudocodigo: Título: Re: como puedo ordenar 2 arraylist ? Publicado por: Usuario Invitado en 14 Febrero 2015, 15:17 pm ¿Se te duplican los elementos al combinar 2 listas en una sola? Es raro.
Suponiendo que tienes una lista como variable de referencia: Código
Y quieres añadir x listas a ella, las listas a añadir pueden ser locales, es decir estar en un método y allí se le pasan a otro método para que las añada a tu lista final: Código
Ejemplo de uso: Código
No habría razón para una duplicidad de listas, a menos que haya elementos repetidos entre las listas. Título: Re: como puedo ordenar 2 arraylist ? Publicado por: 3n31ch en 14 Febrero 2015, 19:16 pm A ver hay dos clases de variables que se pueden declaran , globales y locales : Las globales se declaran en la clase y se pueden acceder en cualquier parte de la clase. Las locales son aquellos que se declaran dentro de un metodo , al acabar ese metodo la variable creada desaparece. Variables globales? wut? Nose, pero yo tengo entendido que las variables Globales no existen en java. Quizás las clases, pero no variables. Si quieres definir que existen clases de variables, entonces yo diría que existen 3 clases de variables. Variables "locales": Se declaran dentro de métodos, cuando el método finaliza la ejecución, entonces la variable desaparece. public void myMethod(){ int number = 5; System.out.println(number); } // Cuando el método termina de ejecutarse (después de imprimir number) entonces la variable number desaparece. Variables de "objetos", mas bien le diría atributos (o algún otro nombre real): Son variables que se crean al inicializar un objeto. una vez el objeto es eliminado, la variable desaparece. Código
Y tercero, (las que creo que confunde nuestro amigo), son las variables de clase: Las variables de clase se crean cuando inicia la ejecución del programa y finalizan cuando finaliza la ejecución del programa. (No son variables globales por el simple hecho de que pertenecen a una clase): Código
A estas variables accedes poniendo el nombre de la Clase (por convención, no utilices un objeto para acceder a ella) y luego el nombre de la variable. Código
En respuesta a tu pregunta, tu necesitarías una variable "local" Título: Re: como puedo ordenar 2 arraylist ? Publicado por: holamega12 en 14 Febrero 2015, 21:07 pm bueno gracias a todos por las respuestas, finalmente lo he conseguido arreglar, el problema, lo tenia en una clase que habia creado, y que creaba los objetos, usando el constructor parametrizado, por lo que intente crear objetos, con los setters correspondientes, y tachannn, se ha conseguido ordenar los objetos, asi que si alguno de vosotros os da problemas por ordenar objetos, intentad usar los setters de la clase correspondientes.
Título: Re: como puedo ordenar 2 arraylist ? Publicado por: robertofd1995 en 15 Febrero 2015, 15:51 pm . Variables de "objetos", mas bien le diría atributos (o algún otro nombre real): Son variables que se crean al inicializar un objeto. una vez el objeto es eliminado, la variable desaparece. A esas me referia , cierto que no me exprese de la manera adecuada. ¿Pero porque dices que tienes entendido que las variables globales en java no existen? Quiero decir yo entiendo como una variable global a los que tu llamas atributos , que es lo que entiendes tu por variable global? Es solo por curiosidad jaja. Título: Re: como puedo ordenar 2 arraylist ? Publicado por: Usuario Invitado en 15 Febrero 2015, 16:31 pm @robertofd1995: Variables globales se les llama a variables que están visibles para toda la aplicación. Si algunas vez has usado C/C++ por ejemplo declaras una variable global así:
Código
Si te das cuenta esa variable es accesible por toda la aplicación, se puede acceder a ella desde cualquier ámbito. Ésto por supuesto, no es recomendable ya que cuando la aplicación escala más y más pueden haber problemas si accidentalmente cambiamos el valor de dicha variable y como es accedida desde muchos ámbitos, la información que se produzca con ella será errónea. Una variable de referencia es una variable que puede ser accedida solo mediante una instancia de la clase que tiene dicha variable, también llamado campo. Hay que tratar a las cosas tal cuales son. No es ético llamar variables globales a las de referencia si ya están pre-establecidos los significados y usos. Un saludo. |