Foro de elhacker.net

Programación => Java => Mensaje iniciado por: Beginner Web en 28 Marzo 2019, 02:51 am



Título: Clase Lista
Publicado por: Beginner Web en 28 Marzo 2019, 02:51 am
Hola tengo una duda como hago para crear una LinkedList(); de objetos?


Título: Re: Clase Lista
Publicado por: rub'n en 28 Marzo 2019, 07:07 am
Hola tengo una duda como hago para crear una LinkedList(); de objetos?

Crea tu javabean primero , la típica clase con setters y getters, y luego usas el método add() de la list  :D

Código
  1. final LinkedList<Persona> list = new LinkedList<>();
  2. list.add(new Persona("Beginner","web",14));
  3.  

El Bean persona con 3 atributos, 2 String , y un int o Integer, faltarían los setters y getters para acceder a dichos atributos, ojo los setters quitan inmutabilidad a un objeto haciendo que no sean aptos para un ambiente de concurrencia, si es inmutable tu bean, o sea:

  * Clase con final (public final class Persona) para que no se pueda heredar.
  * Sin setters
  * Variables de instancia con final
   - y puedes añadir por comodidad una clase estática dentro Aka Builder/AbstractoGenerico para inicializar sus variables de instancia pues mucho mejor, ya que este te creará una copia mutable de Persona con la que puedes trabajar.


Título: Re: Clase Lista
Publicado por: Beginner Web en 28 Marzo 2019, 16:41 pm
Seguro? no te faltó algo a la hora de declarar la lista de Persona?  :huh:


Título: Re: Clase Lista
Publicado por: rub'n en 28 Marzo 2019, 17:37 pm
Seguro? no te faltó algo a la hora de declarar la lista de Persona?  :huh:

:-\ estoy 90% seguro que no probaste el ejemplo, o no hiciste el import bien, que este último no lo creo.

Y eso que lo escribo desde mi Android .

 El operador diamante puede ir vacío también, como con el objeto en el, pero siendo redundante, o sea,


 
Código
  1. final LinkedList<Persona> lista = new LinkedList<Persona>(); // redundante


Título: Re: Clase Lista
Publicado por: Beginner Web en 4 Abril 2019, 10:58 am
Que bueno, estoy usando estos metodos para hacer pruebas pero me gustaria sacar la informacion de la lista dato por dato como hacia en mi querido C++  :laugh:

Código
  1. final LinkedList<Alumno> list = new LinkedList<>();
  2.        list.add(new Alumno("Ana", "Keldysh", (short) 14));
  3.  
  4.        Principal.mostrarMiLista(list);

Código
  1.    public static void mostrarMiLista(LinkedList list) {
  2.  
  3.        if (list.isEmpty()) {
  4.            System.out.println("Lista vacia");
  5.            return;
  6.        }
  7.  
  8.        Iterator it = list.iterator();
  9.  
  10.        System.out.println("Elementos de la lista:");
  11.        while (it.hasNext()) {
  12.            System.out.println(it.next().toString());
  13.        }
  14.  
  15.    }

Quiero hacer esto

Código
  1. void mostrar_lista(nodo lista)
  2. {
  3. nodo i;
  4. if(lista!=NULL){
  5. for(i=lista;i!=NULL;i=i->sig){
  6. cout<<"Legajo: "<<i->dato.legajo<<endl;
  7. cout<<"Apellido: "<<i->dato.apellido<<endl;
  8. cout<<"Nombre: "<<i->dato.nombre<<endl<<endl;
  9. }
  10. }
  11. else
  12. cout<<"LISTA VACIA"<<endl;
  13. }

 :huh:


Título: Re: Clase Lista
Publicado por: rub'n en 5 Abril 2019, 00:50 am
Código
  1. private void mostrarMiLista(final LinkedList<Alumno> list) {
  2.  
  3.        // si la lista no esta vacia o tambien if(!(list.size() == 0)) aunque el Sonar(Analizador de codigo estatico) se queja
  4.        if(!list.isEmpty()) {
  5.            //old way
  6.            for(int f=0; f<list.size(); f++) {
  7.                System.out.println(list.get(f).getNombre());
  8.                System.out.println(list.get(f).getApellido());
  9.                System.out.println(list.get(f).getLegajo());
  10.            }
  11.  
  12.            //old way 2
  13.            for(Alumno tmp : list) {
  14.                System.out.println(tmp.getNombre());
  15.                System.out.println(tmp.getApellido());
  16.                System.out.println(tmp.getLegajo());
  17.            }
  18.  
  19.            //new way with java-8 foreach mucho más eficiente
  20.            //Que Iterator, una de ellas es menos sobrecarga en la heap
  21.            list.forEach(e -> {
  22.                System.out.println(e.getNombre());
  23.                System.out.println(e.getApellido());
  24.                System.out.println(e.getLegajo());
  25.            });
  26.  
  27.            //Con metodo por referencia
  28.            list.forEach(System.out::println); // invoca a toString() internamente
  29.  
  30.             //con IntStream donde e, el parametro del foreach equivale al index, por eso al hacer get(e) funciona
  31.             IntStream.range(0,list.size())
  32.                    .forEach(e -> {
  33.                        System.out.println(list.get(e).getNombre());
  34.                        System.out.println(list.get(e).getApellido());
  35.                        System.out.println(list.get(e).getLegajo());
  36.                    });
  37.  
  38.        } else {
  39.            System.out.println("Lista Vacia");
  40.            JOptionPane.showMessageDialog(null,"Lista vacia.");
  41.        }
  42. }

Potencial toString()

Código
  1. @Override
  2.    public String toString() {
  3.        final StringBuilder sb = new StringBuilder("\nAlumno");
  4.        sb.append("\nnombre='").append(nombre).append("\n");
  5.        sb.append(", apellido='").append(apellido).append("\n");
  6.        sb.append(", legajo='").append(legajo).append("\n");
  7.        sb.append("]");
  8.        return sb.toString();
  9.    }


Título: Re: Clase Lista
Publicado por: Beginner Web en 6 Abril 2019, 04:22 am
Me gusto el de Potencial toString() porque honestamente no pude hacer andar los metodos anteriores, hay alguna forma de crearlo automaticamente o si o si es manual?  ;-)


Título: Re: Clase Lista
Publicado por: rub'n en 6 Abril 2019, 10:15 am
Me gusto el de Potencial toString() porque honestamente no pude hacer andar los metodos anteriores, hay alguna forma de crearlo automaticamente o si o si es manual?  ;-)

Que tal chavalina? Cuales métodos anteriores no pudiste hacer andar?

Si puedes generarlos manual, con tu IDE, usas NetBeans? Te puse un ejemplo con imagen en una de tus preguntas
anteriores https://foro.elhacker.net/java/metodo_mostrar_todos_los_atributos_de_un_objeto_por_pantallaresuelto-t494141.0.html donde, oprimes la combinación de teclas ALT+ Insertar, y de ahí, puedes generar el toString()