1
					C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más / Re:Leer desde un archivo y guardarlo en un Map, Ayuda
« en: 23 de Agosto 2013, 11:12 »
					Vale los miraré, gracias por tu ayuda Alex
					
				Aprende a programar desde cero con el libro "Aprender a programar. Algoritmos y fundamentos de programación orientados a la ingeniería y ciencias". 748 pgs. Editorial aprenderaprogramar.com.
Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.
this.mapaDifTemp = mapaTemp;en vez de:mapaDifTemp.putAll(mapTemp);y otra cosa que he aprendido también es que en la clase ClimaGroenlandiaImpl:if( mapa.containsKey(muni) ){
					List<Integer> listaTmp = new ArrayList<Integer>(mapa.get(muni));
					listaTmp.addAll(listaInt);
					mapa.put(muni, listaTmp);
//LAS TRES LINEAS ANTERIORES SE PUEDEN RESUMIR A ESTA UNICA LINEA:
                                      //mapa.get(muni).addAll(listaInt);
				}//if
				else{
					mapa.put(muni, listaInt);
				}//else			
					package groenlandia;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
// TODO Apartado e
public class ComparadorTemperaturas implements Comparator<String> {
	// Atributo
	// TODO
	private Map<String, List<Integer>> mapaDifTemp = new HashMap<String, List<Integer>>();
	// El constructor debe recibir, y almacenar en el atributo, el Map con los
	// municipios y las temperaturas
	// TODO
	public ComparadorTemperaturas(Map<String , List<Integer>> mapTemp){
	
		mapaDifTemp.putAll(mapTemp);
	}
	public int compare(String municipio1, String municipio2) {
		// TODO
		Integer dif1 = ClimaUtiles.diferenciaMaxima(municipio1, mapaDifTemp);
		Integer dif2 = ClimaUtiles.diferenciaMaxima(municipio2, mapaDifTemp);
		return dif1-dif2;
	}
}
la clase ClimaUtiles funciona y queda tal cual, el método de la clase ClimaGroenlandiaImpl será:public String municipioConMayorDiferenciaTemperaturas() {
		// TODO
		String municipioMaxDif = null;
		// Utilizando Ordering, sería:
		Comparator<String> cmp = new ComparadorTemperaturas(mapa); 
		Ordering<String> ordCmp = Ordering.from(cmp);
		municipioMaxDif = ordCmp.max(mapa.keySet());
		return municipioMaxDif;
	}Haber si tienes o sabes de alguna pagina de ejercicios dedicados al "Map" para forzar mis conocimiento, Gracias Alex
					Map <String , List<Integer>> pruebaMapa = ecg.getMap();
		System.out.println ("La diferencia máxima en Kujalleq es: "+ ClimaUtiles.diferenciaMaxima("Kujalleq", pruebaMapa));ahora mirándolo bien tiene toda la pinta de ser un error de Guava, agregala otra vez.Queremos saber cuál es el municipio donde se registró la mayor diferencia entre las temperaturas máxima y mínima. Para ello:
d) implemente el método estático diferenciaMaxima en la clase ClimaUtiles tal que reciba un String representando un municipio y el Map y devuelva la diferencia entre las temperaturas máxima y mínima de ese municipio. Si necesita encontrar máximos o mínimos, utilice la clase Ordering.
e) Usando la función anterior implemente un Comparator ComparadorTemperaturas para comparar dos municipios (identificados por sus nombres) por su diferencia de temperaturas. Esta clase debe recibir en el constructor el Map del apartado a).
f) Use el comparador anterior para escribir el método String municipioConMayorDiferenciaTemperaturas() que dé respuesta a la pregunta inicial. Utilice el método max de la clase Collections para encontrar el máximo: si tiene un solo argumento (que será de tipo Collection) devuelve el máximo de la colección usando el orden natural. Si recibe dos argumentos, el primero será una colección y el segundo un comparador; en este caso devuelve el máximo de la colección según el criterio establecido por el comparador. Si hubiera más de un municipio con la misma diferencia máxima el método devolverá una cualquiera de ellas.la clase que implementa Comparator sin acabar es:package groenlandia;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
// TODO Apartado e
public class ComparadorTemperaturas implements Comparator<String> {
	// Atributo
	// TODO
	// El constructor debe recibir, y almacenar en el atributo, el Map con los
	// municipios y las temperaturas
	// TODO
	public int compare(String municipio1, String municipio2) {
		// TODO
	}
}
La clase auxiliar con el método estatico y calcula la diferencia sería así:package groenlandia;
import java.util.List;
import java.util.Map;
import java.util.NoSuchElementException;
import com.google.common.collect.Ordering;
public class ClimaUtiles {
	// TODO Apartado d
	public static Integer diferenciaMaxima(String municipio, Map<String, List<Integer>> temperaturas) {
		// Comprobamos si existe el municipio
		// TODO
		Integer diferencia = null;
		if(temperaturas.containsKey(municipio)){
		// Creamos un Ordering
		// TODO
			Ordering<Integer> OrdenUsingMinMax = Ordering.natural();
		// Obtenemos los registros de temperaturas del municipio
		// TODO
			Integer minima = OrdenUsingMinMax.min(temperaturas.get(municipio));
			Integer maxima = OrdenUsingMinMax.max(temperaturas.get(municipio));
		// Calculamos la diferencia entre la temperatura máxima y la mínima
		// TODO
			diferencia = maxima - minima;
		}
		return diferencia;
	}
}Y la clase principal queda siendo la misma que la anterior, Gracias de antemano.
					for(T elemento:agregado){mostrar(elemento);}
En el caso del for normal:for(Iterator<T> it=agregado.iterator(); it.hasNext(); )
{T elemento = it.next();    mostrar(elemento);}
O con el while y sería algo así:Iterator<T> it = agregado.iterator();
while(it.hasNext()){ mostrar( it.next() );   }
Me gustaría saber cuando es recomendable recorrer el agregado con alguno de estos métodos y cuando no, o seria lo mismo hacerlo con uno o con otro.public void cargaFichero(String nombreFichero) {
Iterable<String> lineas = Iterables2.from(nombreFichero);
		for( String line:lineas ){
			Iterable<String> elemLinea = Iterables2.from(line, ","); 
			List<Integer> listaInt = new ArrayList<Integer>();
			List<String> listaStr = new ArrayList<String>();
			for( String el:elemLinea ){
					listaStr.add(el);
			}//segundo for
			String muni = listaStr.get(0);
			listaStr.remove(0);
			
			for( String s:listaStr ){
				listaInt.add(Integer.parseInt(s));
			}//for de conversion
				if( mapa.containsKey(muni) ){
					List<Integer> listaTmp = new ArrayList<Integer>(mapa.get(muni));
					listaTmp.addAll(listaInt);
					mapa.put(muni, listaTmp);
				}//if
				else{
					mapa.put(muni, listaInt);
				}//else								
		}//el primer for
				Iterator it = mapa.entrySet().iterator();
				while(it.hasNext()){
					Map.Entry e = (Map.Entry) it.next();
					System.out.println(e.getKey()+"  "+e.getValue());					
				}//while
					package Hashmap;
import java.util.SortedSet;
public interface ClimaGroenlandia {
	void cargaFichero(String nombreFichero);
	Integer temperaturaMinima();
//	String municipioConMayorDiferenciaTemperaturas();
//	SortedSet<String> municipiosBajo(Integer temp);
}package Hashmap;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.SortedSet;
import java.util.TreeSet;
import Hashmap.Iterables2;
import com.google.common.collect.Ordering;
public class ClimaGroenlandiaImpl implements ClimaGroenlandia {
	// TODO Apartado a
	// Atributo:
	private Map<String , List<Integer>> mapa;
	// El constructor crea el Map vacío
	public ClimaGroenlandiaImpl(){
		mapa = new HashMap<String , List<Integer>>();
	}
	// TODO Apartado b
	public void cargaFichero(String nombreFichero) {
		// Creamos un Iterable<String> a partir del nombre de fichero con el
		// método from con un argumento de Iterables2
		// TODO
		List<String> listaStr = new ArrayList<String>();
		List<Integer> listaInt = new ArrayList<Integer>();
		Iterable<String> lineas = Iterables2.from(nombreFichero);
		// Iteramos sobre él
		// TODO
		for( String lineaEntera:lineas ){
				Iterable<String> lineaPartida = Iterables2.from(lineaEntera, ",");
				listaStr.clear();
				listaInt.clear();
					for( String elemLinea:lineaPartida ){
						listaStr.add(elemLinea);
					}//for segundo
				String muni = listaStr.get(0);
				listaStr.remove(0);
					for( String s:listaStr ){
						listaInt.add(Integer.parseInt(s));
					}//for tercero
//				System.out.println("Municipio: "+muni);
//				System.out.println("lista de valores: "+listaInt);
					//System.out.println("CARGANDO VALORES...........");
					
				//	mapa.put(muni, listaInt);
					List<Integer> aux = new ArrayList<Integer>();
					if( mapa.containsKey(muni) ){
//						System.out.println("Ya existe el municipio......");
//						aux.addAll(mapa.get(muni));					
//						System.out.println(muni+"------>"+aux);
//						System.out.println(listaInt);
//						aux.addAll(listaInt);
					mapa.put(muni, listaInt);
//						System.out.println(mapa.get(muni));
					}//if
					else {
//						System.out.println("Municipio Nuevo....");
					
						mapa.put(muni, listaInt);
//						System.out.println(mapa);
						//mapa.get(muni).addAll(aux);
					}//else
					System.out.println(muni+" temperaturas: "+mapa.get(muni));
			}//fin del for
			
			System.out.println("===============================================");
			Iterator it = mapa.entrySet().iterator();	
			while (it.hasNext()) {
			 Map.Entry e = (Map.Entry)it.next();
			 System.out.println(e.getKey() + " " + e.getValue());
			 }
			// Cada String devuelta es una línea del fichero. Ahora hay que
			//partirla.
			//Usamos el from de dos argumentos de Iterables2
			// TODO
		    //Cada elemento de este Iterable<String> contiene cada uno de los
		    //componentes de la línea. Ahora hay que trasformar el Iterable en
		    //una lista.
		    //Para ello, creamos una lista
			// TODO
			
			// Iteramos sobre los elementos de la línea añadiendo sus
			// elementos a la lista
			// TODO
			
			
			
			// El municipio será el primer elemento
			// TODO
			// Ahora se transforman el resto de los elementos de la línea, que
			// son temperaturas, en enteros, guardándolos en otra lista.
			// TODO
				// El método estático parteInt de la clase Integer devuelve el
				// valor como entero de una String
		
		
			// Se insertan las temperaturas en el map, asociándolas con el
			// municipio. Comprobamos si el municipio existía o no:
			// TODO
			
				// El municipio ya existía; se añaden las temperaturas a las que
				// ya había
				// TODO
				// El municipio no existía; se crea un nuevo par municipio -
				// temperaturas
				// TODO
//		}//el primer for   //////////////////////////////////		
	}//fin del metodo
	// TODO Apartado c
	public Integer temperaturaMinima() {
		Integer minima = null;
		// Creamos un Ordering
		// TODO
		// Iteramos sobre todas las temperaturas, que son las listas del Map:
		// TODO
			// Encontramos el mínimo de cada lista
			// TODO
			// Y vemos si es el primero o si ha superado el menor encontrado
			// hasta el momento
			// TODO
		
		return minima;
	}
	// TODO Apartado f
//	public String municipioConMayorDiferenciaTemperaturas() {
//		// TODO
//		// Utilizando Ordering, sería:
//		// Ordering<String> ordCmp = Ordering.from(cmp);
//		// String municipioMaxDif = ordCmp.max(temperaturasMunicipios.keySet());
//		return municipioMaxDif;
//	}
	// TODO Apartado g
//	public SortedSet<String> municipiosBajo(Integer temp) {
//		// Se crea el conjunto ordenado
//		// TODO
//		// Se itera sobre los municipios, que son las claves del Map
//		// TODO
//			// Se obtiene la lista de temperaturas correspondientes a cada
//			// municipio
//			// TODO
//			// Y si su temperatura es menor que la dada, se añade al conjunto
//			// ordenado de salida
//			// TODO
//		return ss;
//	}
}
package Hashmap;
public class Test {
	
	public static <T> void mostrar(T objeto){
		System.out.println(objeto.toString());
	}
	public static <T> void mostrar(String s, T objeto){
		System.out.println(s + objeto.toString());
	}
	
}package Hashmap;
import Hashmap.ClimaGroenlandia;
import Hashmap.ClimaGroenlandiaImpl;
import java.io.File;
public class TestGroenlandia extends Test {
	private static final String SEP = File.separator;
	private static final String ARCHIVO_DATOS = "." + SEP + "res" + SEP
			+ "registrosTemperaturas.txt";
	public static void main(String[] args) {
		ClimaGroenlandia ecg = new ClimaGroenlandiaImpl();
		ecg.cargaFichero(ARCHIVO_DATOS);
		mostrar("Temperatura mínima: " + ecg.temperaturaMinima());
//		mostrar("Municipio con mayor diferencia de temperaturas: "
//				+ ecg.municipioConMayorDiferenciaTemperaturas());
//		Integer tempMin = -35;
//		mostrar("Municipios que han alcanzado menos de " + tempMin + " grados: "
//				+ ecg.municipiosBajo(tempMin));
	}
}
package Hashmap;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.Arrays;
import java.util.Iterator;
import java.util.NoSuchElementException;
import java.util.Scanner;
import com.google.common.base.CharMatcher;
import com.google.common.base.Splitter;
public class Iterables2 {
	public static Iterable<String> from(String fileName) {
		return new InputStreamSeq(fileName);
	}
	public static <T> Iterable<T> from(T[] array) {
		return Arrays.asList(array);
	}
	/**
	 * Devuelve un Iterable<String> a partir de una cadena y unos
	 * delimitadores. Los delimitadores entran en forma de una String, en la que
	 * cada uno de los caracteres se considera un delimitador. El método elimina
	 * las cadenas vacías de la salida; elimina también los espacios en blanco
	 * delante y detrás de cada cadena devuelta.
	 * 
	 * @param cadena
	 * @param delimitadores
	 * @return Iterable<String>
	 */
	public static Iterable<String> from(String cadena, String delimitadores) {
		Splitter sp = Splitter.on(CharMatcher.anyOf(delimitadores));
		sp.omitEmptyStrings().trimResults();
		Iterable<String> it = sp.split(cadena);
		return it;
	}
	/**
	 * Devuelve un Iterable<String> con las cadenas que se vayan
	 * introduciendo por el teclado terminadas con Enter, finalizando cuando se
	 * pulsa control+z. Las cadenas vacías no las devuelve en el momento: las
	 * devuelve todas juntas cuando se introduce una cadena no vacía.
	 * 
	 * @return Iterable<String>
	 */
	public static Iterable<String> from() {
		Iterable<String> it = new EntradaTeclado();
		return it;
	}
	private static class EntradaTeclado implements Iterable<String> {
		public EntradaTeclado() {
		}
		public Iterator<String> iterator() {
			return new IteradorEntradaTeclado();
		}
		private class IteradorEntradaTeclado implements Iterator<String> {
			private Scanner sc;
			public IteradorEntradaTeclado() {
				sc = new Scanner(System.in);
			}
			public boolean hasNext() {
				return sc.hasNext();
			}
			public String next() {
				String linea = sc.nextLine();
				return linea;
			}
			public void remove() {
				throw new UnsupportedOperationException();
			}
		}
	}
	private static class InputStreamSeq implements Iterable<String> {
		private String nf;
		public InputStreamSeq(String f) {
			nf = f;
		}
		public Iterator<String> iterator() {
			return new InputStreamIterator();
		}
		public String toString() {
			String result = "[";
			String item = "";
			for (Iterator<String> it = this.iterator(); it.hasNext();) {
				item = it.next();
				if (it.hasNext())
					result += item + ", ";
				else
					result += item + "";
			}
			result += "]";
			return result;
		}
		private class InputStreamIterator implements Iterator<String> {
			private BufferedReader bf;
			private String line;
			public InputStreamIterator() {
				try {
					bf = new BufferedReader(new FileReader(nf));
					line = bf.readLine();
				} catch (IOException e) {
					throw new IllegalArgumentException(
							"No se puede acceder al fichero de entrada");
				}
			}
			public boolean hasNext() {
				return line != null;
			}
			public String next() {
				if (!hasNext())
					throw new NoSuchElementException();
				String pal = line;
				try {
					line = bf.readLine();
				} catch (IOException e) {
					throw new IllegalArgumentException(
							"No se puede acceder al fichero de entrada");
				}
				return pal;
			}
			public void remove() {
				throw new UnsupportedOperationException();
			}
		}
	}
}
y finalmente en el mismo proyecto crear una carpeta con el archivo de texto:Kujalleq,-12,-4,3,5,-20,-37
Qaasuitsup,-2,-14,3,4
Qeqqata,-19,-5,3,12,20,15,20,-34
Kujalleq,-26,-11,3,17,10,13,20,-31
Sermersooq,-42,-4,3,11,0,17,20,-14
Qaasuitsup,-19,-4,3,22,11,15,20,-23
Qeqqata,-33,-23,3,15,0,15,20,-40
Sermersooq,-40,-14,3,13,22,19,20,-50
					package groenlandia;
import java.util.SortedSet;
public interface ClimaGroenlandia {
	void cargaFichero(String nombreFichero);
	Integer temperaturaMinima();
//	String municipioConMayorDiferenciaTemperaturas();
//	SortedSet<String> municipiosBajo(Integer temp);
}
					package utils;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.Arrays;
import java.util.Iterator;
import java.util.NoSuchElementException;
import java.util.Scanner;
import com.google.common.base.CharMatcher;
import com.google.common.base.Splitter;
public class Iterables2 {
	public static Iterable<String> from(String fileName) {
		return new InputStreamSeq(fileName);
	}
	public static <T> Iterable<T> from(T[] array) {
		return Arrays.asList(array);
	}
	/**
	 * Devuelve un Iterable<String> a partir de una cadena y unos
	 * delimitadores. Los delimitadores entran en forma de una String, en la que
	 * cada uno de los caracteres se considera un delimitador. El método elimina
	 * las cadenas vacías de la salida; elimina también los espacios en blanco
	 * delante y detrás de cada cadena devuelta.
	 * 
	 * @param cadena
	 * @param delimitadores
	 * @return Iterable<String>
	 */
	public static Iterable<String> from(String cadena, String delimitadores) {
		Splitter sp = Splitter.on(CharMatcher.anyOf(delimitadores));
		sp.omitEmptyStrings().trimResults();
		Iterable<String> it = sp.split(cadena);
		return it;
	}
	/**
	 * Devuelve un Iterable<String> con las cadenas que se vayan
	 * introduciendo por el teclado terminadas con Enter, finalizando cuando se
	 * pulsa control+z. Las cadenas vacías no las devuelve en el momento: las
	 * devuelve todas juntas cuando se introduce una cadena no vacía.
	 * 
	 * @return Iterable<String>
	 */
	public static Iterable<String> from() {
		Iterable<String> it = new EntradaTeclado();
		return it;
	}
	private static class EntradaTeclado implements Iterable<String> {
		public EntradaTeclado() {
		}
		public Iterator<String> iterator() {
			return new IteradorEntradaTeclado();
		}
		private class IteradorEntradaTeclado implements Iterator<String> {
			private Scanner sc;
			public IteradorEntradaTeclado() {
				sc = new Scanner(System.in);
			}
			public boolean hasNext() {
				return sc.hasNext();
			}
			public String next() {
				String linea = sc.nextLine();
				return linea;
			}
			public void remove() {
				throw new UnsupportedOperationException();
			}
		}
	}
	private static class InputStreamSeq implements Iterable<String> {
		private String nf;
		public InputStreamSeq(String f) {
			nf = f;
		}
		public Iterator<String> iterator() {
			return new InputStreamIterator();
		}
		public String toString() {
			String result = "[";
			String item = "";
			for (Iterator<String> it = this.iterator(); it.hasNext();) {
				item = it.next();
				if (it.hasNext())
					result += item + ", ";
				else
					result += item + "";
			}
			result += "]";
			return result;
		}
		private class InputStreamIterator implements Iterator<String> {
			private BufferedReader bf;
			private String line;
			public InputStreamIterator() {
				try {
					bf = new BufferedReader(new FileReader(nf));
					line = bf.readLine();
				} catch (IOException e) {
					throw new IllegalArgumentException(
							"No se puede acceder al fichero de entrada");
				}
			}
			public boolean hasNext() {
				return line != null;
			}
			public String next() {
				if (!hasNext())
					throw new NoSuchElementException();
				String pal = line;
				try {
					line = bf.readLine();
				} catch (IOException e) {
					throw new IllegalArgumentException(
							"No se puede acceder al fichero de entrada");
				}
				return pal;
			}
			public void remove() {
				throw new UnsupportedOperationException();
			}
		}
	}
}
la clase ClimaGreonlandiaImppackage groenlandia;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.SortedSet;
import java.util.TreeSet;
import types.ListType;
import utils.Iterables2;
import utils.Lists;
import com.google.common.collect.Ordering;
public class ClimaGroenlandiaImpl implements ClimaGroenlandia {
	// TODO Apartado a
	// Atributo:
	private Map<String , List<Integer>> mapa;
	// El constructor crea el Map vacío
	public ClimaGroenlandiaImpl(){
		mapa = new HashMap<String , List<Integer>>();
	}
	// TODO Apartado b
	public void cargaFichero(String nombreFichero) {
		// Creamos un Iterable<String> a partir del nombre de fichero con el
		// método from con un argumento de Iterables2
		// TODO
		List<String> listaStr = new ArrayList<String>();
		List<Integer> listaInt = new ArrayList<Integer>();
		Iterable<String> lineas = Iterables2.from(nombreFichero);
		// Iteramos sobre él
		// TODO
		for( String lineaEntera:lineas ){
				Iterable<String> lineaPartida = Iterables2.from(lineaEntera, ",");
				listaStr.clear();
				listaInt.clear();
					for( String elemLinea:lineaPartida ){
						listaStr.add(elemLinea);
					}//for segundo
				String muni = listaStr.get(0);
				listaStr.remove(0);
					for( String s:listaStr ){
						listaInt.add(Integer.parseInt(s));
					}//for tercero
//				System.out.println("Municipio: "+muni);
//				System.out.println("lista de valores: "+listaInt);
					//System.out.println("CARGANDO VALORES...........");
					
				//	mapa.put(muni, listaInt);
					List<Integer> aux = new ArrayList<Integer>();
					if( mapa.containsKey(muni) ){
//						System.out.println("Ya existe el municipio......");
//						aux.addAll(mapa.get(muni));					
//						System.out.println(muni+"------>"+aux);
//						System.out.println(listaInt);
//						aux.addAll(listaInt);
//						mapa.put(muni, listaInt);
//						System.out.println(mapa.get(muni));
					}//if
					else {
//						System.out.println("Municipio Nuevo....");
					
						mapa.put(muni, listaInt);
//						System.out.println(mapa);
						//mapa.get(muni).addAll(aux);
					}//else
					System.out.println(muni+" temperaturas: "+mapa.get(muni));
			}//fin del for
			
			System.out.println("===============================================");
			Iterator it = mapa.entrySet().iterator();	
			while (it.hasNext()) {
			 Map.Entry e = (Map.Entry)it.next();
			 System.out.println(e.getKey() + " " + e.getValue());
			 }
			// Cada String devuelta es una línea del fichero. Ahora hay que
			//partirla.
			//Usamos el from de dos argumentos de Iterables2
			// TODO
		    //Cada elemento de este Iterable<String> contiene cada uno de los
		    //componentes de la línea. Ahora hay que trasformar el Iterable en
		    //una lista.
		    //Para ello, creamos una lista
			// TODO
			
			// Iteramos sobre los elementos de la línea añadiendo sus
			// elementos a la lista
			// TODO
			
			
			
			// El municipio será el primer elemento
			// TODO
			// Ahora se transforman el resto de los elementos de la línea, que
			// son temperaturas, en enteros, guardándolos en otra lista.
			// TODO
				// El método estático parteInt de la clase Integer devuelve el
				// valor como entero de una String
		
		
			// Se insertan las temperaturas en el map, asociándolas con el
			// municipio. Comprobamos si el municipio existía o no:
			// TODO
			
				// El municipio ya existía; se añaden las temperaturas a las que
				// ya había
				// TODO
				// El municipio no existía; se crea un nuevo par municipio -
				// temperaturas
				// TODO
//		}//el primer for   //////////////////////////////////		
	}//fin del metodo
	// TODO Apartado c
	public Integer temperaturaMinima() {
		Integer minima = null;
		// Creamos un Ordering
		// TODO
		// Iteramos sobre todas las temperaturas, que son las listas del Map:
		// TODO
			// Encontramos el mínimo de cada lista
			// TODO
			// Y vemos si es el primero o si ha superado el menor encontrado
			// hasta el momento
			// TODO
		
		return minima;
	}
	// TODO Apartado f
//	public String municipioConMayorDiferenciaTemperaturas() {
//		// TODO
//		// Utilizando Ordering, sería:
//		// Ordering<String> ordCmp = Ordering.from(cmp);
//		// String municipioMaxDif = ordCmp.max(temperaturasMunicipios.keySet());
//		return municipioMaxDif;
//	}
	// TODO Apartado g
//	public SortedSet<String> municipiosBajo(Integer temp) {
//		// Se crea el conjunto ordenado
//		// TODO
//		// Se itera sobre los municipios, que son las claves del Map
//		// TODO
//			// Se obtiene la lista de temperaturas correspondientes a cada
//			// municipio
//			// TODO
//			// Y si su temperatura es menor que la dada, se añade al conjunto
//			// ordenado de salida
//			// TODO
//		return ss;
//	}
}
y la clase principal que aquí le llamamos TestGreonlandiapackage test;
import groenlandia.ClimaGroenlandia;
import groenlandia.ClimaGroenlandiaImpl;
import java.io.File;
public class TestGroenlandia extends Test {
	private static final String SEP = File.separator;
	private static final String ARCHIVO_DATOS = "." + SEP + "res" + SEP
			+ "registrosTemperaturas.txt";
	public static void main(String[] args) {
		ClimaGroenlandia ecg = new ClimaGroenlandiaImpl();
		ecg.cargaFichero(ARCHIVO_DATOS);
		mostrar("Temperatura mínima: " + ecg.temperaturaMinima());
//		mostrar("Municipio con mayor diferencia de temperaturas: "
//				+ ecg.municipioConMayorDiferenciaTemperaturas());
//		Integer tempMin = -35;
//		mostrar("Municipios que han alcanzado menos de " + tempMin + " grados: "
//				+ ecg.municipiosBajo(tempMin));
	}
}
					import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.Arrays;
import java.util.Iterator;
import java.util.NoSuchElementException;
import java.util.Scanner;
import com.google.common.base.CharMatcher;
import com.google.common.base.Splitter;
public class Iterables2 {
	public static Iterable<String> from(String fileName) {
		return new InputStreamSeq(fileName);
	}
	public static <T> Iterable<T> from(T[] array) {
		return Arrays.asList(array);
	}
	/**
	 * Devuelve un Iterable<String> a partir de una cadena y unos
	 * delimitadores. Los delimitadores entran en forma de una String, en la que
	 * cada uno de los caracteres se considera un delimitador. El método elimina
	 * las cadenas vacías de la salida; elimina también los espacios en blanco
	 * delante y detrás de cada cadena devuelta.
	 * 
	 * @param cadena
	 * @param delimitadores
	 * @return Iterable<String>
	 */
	public static Iterable<String> from(String cadena, String delimitadores) {
		Splitter sp = Splitter.on(CharMatcher.anyOf(delimitadores));
		sp.omitEmptyStrings().trimResults();
		Iterable<String> it = sp.split(cadena);
		return it;
	}
	/**
	 * Devuelve un Iterable<String> con las cadenas que se vayan
	 * introduciendo por el teclado terminadas con Enter, finalizando cuando se
	 * pulsa control+z. Las cadenas vacías no las devuelve en el momento: las
	 * devuelve todas juntas cuando se introduce una cadena no vacía.
	 * 
	 * @return Iterable<String>
	 */
	public static Iterable<String> from() {
		Iterable<String> it = new EntradaTeclado();
		return it;
	}
	private static class EntradaTeclado implements Iterable<String> {
		public EntradaTeclado() {
		}
		public Iterator<String> iterator() {
			return new IteradorEntradaTeclado();
		}
		private class IteradorEntradaTeclado implements Iterator<String> {
			private Scanner sc;
			public IteradorEntradaTeclado() {
				sc = new Scanner(System.in);
			}
			public boolean hasNext() {
				return sc.hasNext();
			}
			public String next() {
				String linea = sc.nextLine();
				return linea;
			}
			public void remove() {
				throw new UnsupportedOperationException();
			}
		}
	}
	private static class InputStreamSeq implements Iterable<String> {
		private String nf;
		public InputStreamSeq(String f) {
			nf = f;
		}
		public Iterator<String> iterator() {
			return new InputStreamIterator();
		}
		public String toString() {
			String result = "[";
			String item = "";
			for (Iterator<String> it = this.iterator(); it.hasNext();) {
				item = it.next();
				if (it.hasNext())
					result += item + ", ";
				else
					result += item + "";
			}
			result += "]";
			return result;
		}
		private class InputStreamIterator implements Iterator<String> {
			private BufferedReader bf;
			private String line;
			public InputStreamIterator() {
				try {
					bf = new BufferedReader(new FileReader(nf));
					line = bf.readLine();
				} catch (IOException e) {
					throw new IllegalArgumentException(
							"No se puede acceder al fichero de entrada");
				}
			}
			public boolean hasNext() {
				return line != null;
			}
			public String next() {
				if (!hasNext())
					throw new NoSuchElementException();
				String pal = line;
				try {
					line = bf.readLine();
				} catch (IOException e) {
					throw new IllegalArgumentException(
							"No se puede acceder al fichero de entrada");
				}
				return pal;
			}
			public void remove() {
				throw new UnsupportedOperationException();
			}
		}
	}
}
import com.google.common.collect.Ordering;
public class ClimaGroenlandiaImpl implements ClimaGroenlandia {
	// TODO Apartado a
	// Atributo:
	private Map<String , List<Integer>> mapa, mapa1;
	// El constructor crea el Map vacío
	public ClimaGroenlandiaImpl(){
		mapa = new HashMap<String , List<Integer>>();
		mapa1 = new HashMap<String , List<Integer>>();
	}
	// TODO Apartado b
	public void cargaFichero(String nombreFichero) {
		// Creamos un Iterable<String> a partir del nombre de fichero con el
		// método from con un argumento de Iterables2
		// TODO
		List<String> listaStr = new ArrayList<String>();
		List<Integer> listaInt = new ArrayList<Integer>();
		Iterable<String> lineas = Iterables2.from(nombreFichero);
		// Iteramos sobre él
		// TODO
		for( String lineaEntera:lineas ){
				Iterable<String> lineaPartida = Iterables2.from(lineaEntera, ",");
				listaStr.clear();
				listaInt.clear();
					for( String elemLinea:lineaPartida ){
						listaStr.add(elemLinea);
					}//for segundo
				String muni = listaStr.get(0);
				listaStr.remove(0);
					for( String s:listaStr ){
						listaInt.add(Integer.parseInt(s));
					}//for tercero
//				System.out.println("Municipio: "+muni);
//				System.out.println("lista de valores: "+listaInt);
					//System.out.println("CARGANDO VALORES...........");
					
				//	mapa.put(muni, listaInt);
					List<Integer> aux = new ArrayList<Integer>();
					if( mapa.containsKey(muni) ){
//						System.out.println("Ya existe el municipio......");
//						aux.addAll(mapa.get(muni));					
//						System.out.println(muni+"------>"+aux);
//						System.out.println(listaInt);
//						aux.addAll(listaInt);
//						mapa.put(muni, listaInt);
//						System.out.println(mapa.get(muni));
					}//if
					else {
//						System.out.println("Municipio Nuevo....");
					
						mapa.put(muni, listaInt);
//						System.out.println(mapa);
						//mapa.get(muni).addAll(aux);
					}//else
					System.out.println(muni+" temperaturas: "+mapa.get(muni));
			}//fin del for
			
			System.out.println("===============================================");
			Iterator it = mapa.entrySet().iterator();	
			while (it.hasNext()) {
			 Map.Entry e = (Map.Entry)it.next();
			 System.out.println(e.getKey() + " " + e.getValue());
			 }
			// Cada String devuelta es una línea del fichero. Ahora hay que
			//partirla.
			//Usamos el from de dos argumentos de Iterables2
			// TODO
		    //Cada elemento de este Iterable<String> contiene cada uno de los
		    //componentes de la línea. Ahora hay que trasformar el Iterable en
		    //una lista.
		    //Para ello, creamos una lista
			// TODO
			
			// Iteramos sobre los elementos de la línea añadiendo sus
			// elementos a la lista
			// TODO
			
			
			
			// El municipio será el primer elemento
			// TODO
			// Ahora se transforman el resto de los elementos de la línea, que
			// son temperaturas, en enteros, guardándolos en otra lista.
			// TODO
				// El método estático parteInt de la clase Integer devuelve el
				// valor como entero de una String
		
		
			// Se insertan las temperaturas en el map, asociándolas con el
			// municipio. Comprobamos si el municipio existía o no:
			// TODO
			
				// El municipio ya existía; se añaden las temperaturas a las que
				// ya había
				// TODO
				// El municipio no existía; se crea un nuevo par municipio -
				// temperaturas
				// TODO
//		}//el primer for   //////////////////////////////////		
	}//fin del metodo
*******************************************************************Kujalleq,-12,-4,3,5,-20,-37
Qaasuitsup,-2,-14,3,4
Qeqqata,-19,-5,3,12,20,15,20,-34
Kujalleq,-26,-11,3,17,10,13,20,-31
Sermersooq,-42,-4,3,11,0,17,20,-14
Qaasuitsup,-19,-4,3,22,11,15,20,-23
Qeqqata,-33,-23,3,15,0,15,20,-40
Sermersooq,-40,-14,3,13,22,19,20,-50
*************************Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.
Abraham Lincoln (1808-1865) Presidente estadounidense.
aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación