Archivo

Posts Tagged ‘Map’

Java Recorrer Colecciones [ Map ] usando for/while Parte 2

noviembre 29, 2009 3 comentarios

En el Post Anterior Mostre tres formas de recorrer una Collection ahora dejo como recorrer un Map.

En si un Map tiene una Clave y un Valor, por eso es un poco mas complicado recorrerlo

Iterator

Primero Mostrare como recorrer con Iterator

Iterator it = mapList.entrySet().iterator();
    	while(it.hasNext()) {
    		Map.Entry ent = (Map.Entry)it.next();
    		Persona p = (Persona)ent.getValue();
    		System.out.println(p);
    	}

Lo diferente esta en el Map.Entry , esto me permitirá acceder a la key y al value. (Recordemos que el value es el objeto completo).

Simple For

En si, Map no tiene un indice numérico por defecto, como si lo tienen los List, es por eso que para recorrer un Map usando for NO se podrá decir “quiero el objeto en la posición x” pero hay una forma de poder hacerlo, esta forma es convertir el map en array (arreglo) , Esto lo muestro a continuación

for(int i=0; i<mapList.size(); i++) {
    System.out.println(mapList.values().toArray()[i]);
}

Del Map tome todos los valores con el metodo values() esto em devuelve un Set, como no tiene un indice lo convierto a Array y de ese array saco el objeto en la posición “i”

 

Foreach

:

Por ultimo dejo el foreach

for(Persona p : mapList.values()) {
    System.out.println(p);
}

La forma mas sencilla de recorrer un Map…

Acá les dejo el codigo con las tres formas de Recorrer

/**
 * @(#)Persona.java
 *
 *
 * @author Esteban Fuentealba
 * @version 1.00 2009/11/29
 */

import java.util.*;

public class Persona {
	private String rut;
	private String nombre;

	public Persona() {}
    public Persona(String rut,String nombre) {
    	this.rut 	= rut;
    	this.nombre = nombre;
    }
    public void setRut(String val) {
    	this.rut = val;
    }
    public void setNombre(String val) {
    	this.nombre = val;
    }
    public String getRut() {
    	return this.rut;
    }
    public String getNombre() {
    	return this.nombre;
    }

    public String toString() {
    	return "[Rut: "+this.getRut()+"] [Nombre: "+this.getNombre()+"]";
    }
    public static void main(String[] args) {

    	Map<String,Persona> mapList = new HashMap<String,Persona>();
    		Persona pA = new Persona("111-1","Juan");
    		Persona pB = new Persona("222-2","Pedro");
    		Persona pC = new Persona("333-3","Luis");
    	mapList.put(pA.getRut(),pA);
    	mapList.put(pB.getRut(),pB);
    	mapList.put(pC.getRut(),pC);

    	System.out.println("Recorrer Map con Iterator:");
    	Iterator it = mapList.entrySet().iterator();
    	while(it.hasNext()) {
    		Map.Entry ent = (Map.Entry)it.next();
    		Persona p = (Persona)ent.getValue();
    		System.out.println(p);
    	}
    	System.out.println("Recorrer Map con simple for:");
    	for(int i=0; i<mapList.size(); i++) {
    		System.out.println(mapList.values().toArray()[i]);
    	}

    	System.out.println("Recorrer Map con foreach:");
    	for(Persona p : mapList.values()) {
    		System.out.println(p);
    	}

    }
}

Espero que les sirva,

Saludos!

Categorías:Java Etiquetas: , , , , , , , ,

Preparando Certamen 3 – Ejercicio 2 [POO – Java] PEF2501

noviembre 28, 2009 1 comentario

Otro Ejercicio de Java para practicar para el cetamen 3 de Programación Orientada a Objetos, Solo Tienen que hacer lo que les piden, Si no piden main y no piden testear la aplicación no lo hagan (Si les sobra tiempo pueden hacerlo).
Enunciado:
Una biblioteca requiere de una aplicación que sea capaz de llevar un registro de los alumnos de las carreras y los pedidos de libros

que ellos realizan. Para cubrir este requerimiento se ha creado
un conjunto de clases, cuya especificación es la siguiente:
CARRERA
ATRIBUTOS
nombre: String
duración: byte
acreditada: boolean
registroAlumnos: HashMap (considerar el RUT del
alumno como clave primaria (key))

MÉTODOS
Constructor sin parámetros
Constructor con parámetros (que reciba todos los atributos, obviando los alumnos, que deben ser ingresados posteriormente)
Accesador para cada atributo
Mutador para cada atributo
Método de impresión
Método addAlumno (que reciba un objeto del tipo Alumno ya inicializado y que valide la unicidad de registros mediante un mensaje en caso de que el alumno a ingresar ya se encuentre registrado).
ALUMNO
ATRIBUTOS:
RUT: String (máximo 10, los primeros 8 son números, luego el “-” y finalmente un número o una letra)
tipo: int (considerar uso de las siguientes constantes
Alumno.ADJUNTO:1,Alumno.REGULAR:2, Alumno.RETIRADO:3)
ciudad: String
prestamos: ArrayList
MÉTODOS:
Constructor sin parámetros
Constructor con parámetros (obviando los préstamos, que deben ser generados posteriormente)
Accesador para cada atributo
Mutador para cada atributo
Método de impresión
Método addPrestamo, que reciba como parámetro un objeto del tipo Préstamo ya inicializado.
Método booleano isResponsable, que devuelve true si los tres últimos préstamos han sido devueltos en la fecha que corresponde, false en su defecto, o si no existen préstamos registrados.
PRÉSTAMO
ATRIBUTOS:
fechaPréstamo: date
fechaDevolución: date (no puede ser inferior a la fecha de
préstamo).
libro: String
atrasado: boolean
MÉTODOS:
Constructor sin parámetros
Constructor con parámetros (que reciba todos los atributos, siendo atrasado: false)
Accesador para cada atributo
Mutador para cada atributo, excepto para el caso del atributo atrasado.
Método de impresión
Método devolverLibro() que recibe la fecha efectiva de la devolución y si es mayor a la fecha en la que debía ser devuelto el libro entonces deja el atributo atrasado seteado en true.
Todas las reglas de negocio deben controlarse con
Excepciones.(Considerar lanzar objetos Exception para el tipo
numérico y para el tipo String por separado, explicando en el
mensaje la regla de negocio no cumplida).

Descarga Código de fuente:
http://estebanfuentealba.net/ayudantia/PreparandoCertamen3EjercicioDos.rar

PD: Si quieren Testear El programa aqui les dejo un Main

/**
 * @(#)EjercicioDos.java
 *
 * EjercicioDos application
 *
 * @author Esteban Fuentealba
 * @version 1.00 2009/11/28
 */
import cl.duoc.pef.ejerciciodos.entidades.*;
import cl.duoc.pef.ejerciciodos.exception.*;
import java.util.*;
public class EjercicioDos {
    
    public static void main(String[] args) {
    	try {
	    	Carrera c = new Carrera("Informatica",(byte)4,true);
	    	
	    	Alumno alumnoA = new Alumno("11111111-1",Alumno.REGULAR,"Concepcion");
	    		Prestamo prestamoA = new Prestamo(new Date(2009,6,20),new Date(2009,6,25),"POO Avanzada");
	    		Prestamo prestamoB = new Prestamo(new Date(2009,7,20),new Date(2009,8,25),"Programacion para Principiantes");
	    		Prestamo prestamoC = new Prestamo(new Date(2009,9,20),new Date(2009,9,25),"Como  salir de la Depresión");
	    	alumnoA.addPrestamo(prestamoA);
	    	alumnoA.addPrestamo(prestamoB);
	    	alumnoA.addPrestamo(prestamoC);
	    	
	    	Alumno alumnoB = new Alumno("22222222-2",Alumno.ADJUNTO,"Concepcion");
	    		Prestamo prestamoD = new Prestamo(new Date(2009,7,20),new Date(2009,11,25),"Revista caras");
	    	alumnoB.addPrestamo(prestamoD);
	    	Alumno alumnoC = new Alumno("33333333-3",Alumno.REGULAR,"Concepcion");
	    	Alumno alumnoD = new Alumno("44444444-4",Alumno.RETIRADO,"Santiago");
	    	
	    	c.addAlumno(alumnoA);
	    	c.addAlumno(alumnoB);
	    	c.addAlumno(alumnoC);
	    	c.addAlumno(alumnoD);
	    	
	    	c.imprimir();
	    	prestamoB.devolverLibro(new Date(2010,0,0));
	    	System.out.println("Responsable: "+alumnoA.isResponsable());
    	} catch(NumberException exA) {
    		System.out.println(exA.getMessage());
    	} catch(StringException exB) {
    		System.out.println(exB.getMessage());
    	} catch(Exception exC) {
    		System.out.println(exC.getMessage());
    	}
   	}
}

Saludos!

Preparando Certamen 3 – Ejercicio 1 [POO – Java] PEF2501

noviembre 28, 2009 1 comentario

Aquí un ejercicio para practicar para su certamen del día lunes, la profesora Yasna se los envió por blackboard a sus cuentas según me informan por interno xD.

 

 

 

Enunciado:
Se desea manejar los antecedentes de un curso. Cada curso cuenta
con un nombre y con una nómina de alumnos. Por su parte, cada
alumno cuenta con un ID, un nombre y un promedio final.

Algunos de los métodos asociados al curso son los que se indican a
continuación:

MÉTODO DESCRIPCIÓN
public void matricular(Alumno a) Permite AGREGAR al alumno ‘a’
al curso.
public boolean remover(Alumno a) Permite REMOVER al alumno ‘a’
del curso.
public boolean estaInscrito(Alumno a) Permite saber si el alumno ‘a’
se encuentra presente en el
curso

En el curso no se pueden tener alumnos repetidos, es decir, NO
SERÍA POSIBLE tratar de matricular a un mismo alumno dos veces.

Se pide implementar las clases que permitan almacenar los datos de
un curso y sus alumnos.

Se pide implementar la clase Main que contenga el método main que
permita cumplir con la siguiente funcionalidad:

· Crear a tres alumnos con los siguientes datos:
o ID = 1; NOMBRE = “ALFA”; PROMEDIO = 6.5
o ID = 2; NOMBRE = “BETA”; PROMEDIO = 4.5
o ID = 3; NOMBRE = “GAMMA”; PROMEDIO = 5.5
· Crear el curso llamado PEF2501
· Imprimir la nómina de alumnos del curso
· Matricular a ALFA y BETA en el curso PEF2501

· Imprimir en la salida estándar, utilizando el método
estaInscrito(), si el alumno llamado BETA se encuentra
inscrito en el curso.
· Imprimir en la salida estándar, utilizando el método
estaInscrito(), si el alumno llamado GAMMA se encuentra
inscrito en el curso.
· Remover del curso al alumno llamado BETA
· Imprimir la nómina del curso

Descarga Codigo de Fuente:
http://estebanfuentealba.net/ayudantia/PreparandoCertamen3EjercicioUno.rar

Saludos!