获取与Map中相应最大值相关联的键(TreeMap / HashMap)

我编写了下面的代码,以找出在JAVA中使用TreeMap具有最大值(Integer)的键(String)。

public static void maxprofitItem(int[] costs, int[] prices, int[] sales,String[] items) { TreeMapmap=new TreeMap(); int[] profits=new int[items.length]; int maxvalue; for(int i=0;i0){ 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 entry : map.entrySet()) { if (entry.getValue()==maxvalue) { System.out.println(entry.getKey()); break; } } } else{ System.out.println("There are no profits in this sale"); } } 

maxprofitItem方法获取以下参数作为参数。

通过成本值{100,120,150,1000}传递价格值{110,110,200,2000}传递销售值{20,100,50,3}传递项目值{“TV”,“图形卡”,“外部硬盘”,“监控”}

该方法计算利润并将项目(Key)和利润(Value)放在TreeMap中。树形图如下所示。

关键:监控,价值:3000

密钥:外部硬盘,值:2500

关键:电视,价值:200

TreeMap和HashMap以相同的方式放置键/值对组合。 有没有更好的方法来使用TreeMap来找出与最大值相关联的键,因为它在这方面以与HashMap相同的方式操作。

提前致谢。

诀窍在于,您可以通过提供按值比较条目的Comparator来找到最大值及其键。

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

或者使用新的流API

 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()); }); 

您似乎在问是否使用TreeMap而不是HashMap将为您提供一种更简单的方法来查找对应于最大值的键/

答案就是……不幸的是……不。