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.