recorrer example entre ejemplos ejemplo diferencia java generics hashmap key-value treemap

example - recorrer hashmap java foreach



Obtención de la clave asociada con el valor máximo correspondiente en un mapa(TreeMap/HashMap) (2)

He escrito el siguiente código para encontrar la clave (String) que tiene el valor máximo (Integer) usando TreeMap en JAVA.

public static void maxprofitItem(int[] costs, int[] prices, int[] sales,String[] items) { TreeMap<String,Integer>map=new TreeMap<String,Integer>(); int[] profits=new int[items.length]; int maxvalue; for(int i=0;i<items.length;i++){ profits[i]=sales[i]*prices[i]-costs[i]*sales[i]; if(profits[i]>0){ map.put(items[i],profits[i]); } } Set setOfKeys = map.keySet(); Iterator iterator = setOfKeys.iterator(); while (iterator.hasNext()) { String key = (String) iterator.next(); Integer value = (Integer)map.get(key); System.out.println("Key: "+ key+", Value: "+ value); } if(!map.isEmpty()){ System.out.println("The maximum value is "+(Collections.max(map.values()))); System.out.println("And it is for"); maxvalue=Collections.max(map.values()); for (Entry<String, Integer> entry : map.entrySet()) { if (entry.getValue()==maxvalue) { System.out.println(entry.getKey()); break; } } } else{ System.out.println("There are no profits in this sale"); } }

El método maxprofitItem obtiene los siguientes parámetros como argumentos.

Pase los valores de los costos {100,120,150,1000} Pase los valores de los precios {110,110,200,2000} Pase los valores de venta {20,100,50,3} Pase los valores de los artículos {"TV", "Tarjeta gráfica", "Disco duro externo", " Monitor"}

El método calcula los beneficios y coloca los elementos (clave) y los beneficios (valor) en TreeMap. Y ​​TreeMap se ve a continuación.

Clave: Monitor, Valor: 3000

Clave: Disco duro externo, Valor: 2500

Clave: TV, Valor: 200

TreeMap y HashMap colocan la combinación de pares clave / valor de la misma manera. ¿Existe una mejor manera de utilizar TreeMap inorder para averiguar la clave asociada con el valor máximo, ya que funciona de la misma manera que HashMap en este sentido.

Gracias por adelantado.


El truco es que puede encontrar el valor máximo junto con su clave al proporcionar Comparator que compara las entradas por valor.

Comparator<Map.Entry<String, Integer>> byValue = Map.Entry.comparingByValue(); Map.Entry<String, Integer> maxEntry = Collections.max(map.entrySet(), byValue); System.out.println("Maximum value is " + maxEntry.getValue()); System.out.println("And it is for " + maxEntry.getKey());

O usando una nueva API de transmisión

map.entrySet().stream() .max(Map.Entry.comparingByValue()) .ifPresent(maxEntry -> { System.out.println("Maximum value is " + maxEntry.getValue()); System.out.println("And it is for " + maxEntry.getKey()); });


Parece que te estás preguntando si usar TreeMap lugar de HashMap te dará una forma más sencilla de encontrar la clave correspondiente al valor más grande /

La respuesta a eso es ... desafortunadamente ... No.