输出最高分
我有以下带有分数的团队列表:
List<String> teams = Arrays.asList("Dortmund 8", "Bayern 10", "Madrid 9", "Bayern 2", "Dortmund 4");
我需要输出得分最高的团队。如果分数相同,则输出最先获得的团队。在我的例子中,多特蒙德和拜仁的得分相同,但拜仁获得了第一。所以输出是拜仁。这是我现在所拥有的:
Map<String, Integer> map = new HashMap<>();
for (String s : teams) {
String[] rec = s.split(" ");
int val = Integer.parseInt(rec[1]);
map.put(rec[0], map.get(rec[0])==null ? val : map.get(rec[0]) + val);
}
System.out.println(map);
该代码只是将每个团队的分数相加并将其保存在地图上。我无法改变我需要的方式。
回答
int max = 0;
String bestTeam="";
Map<String, Integer> map = new HashMap<>();
for (String s : teams)
{
String[] rec = s.split(" ");
int val = Integer.parseInt(rec[1]);
int sum = map.get(rec[0])==null ? val : map.get(rec[0]) + val;
map.put(rec[0], sum);
if (sum>max) {
max = sum;
bestTeam = rec[0];
}
}
System.out.println("Max score winner team :" + bestTeam + "-["+max+"] goals");
-
其他方法只是选择了最大条目。亚历克斯·鲁登科(Alex Rudenko)和尼古拉斯·查拉兰比迪斯(Nikolas Charalambidis)在此处撰写的流方法流应该如何处理这种情况的完美例子。与此相关的是使用地图,该地图仅用于保存每支球队的总进球数。排序在数组列表迭代中是隐式的。哈希图从未参与任何类型的排序。
Dortmund 11", "Bayern 10", "Madrid 9", "Bayern 2", "Bayern 4"
这份名单的获胜者 不是多特蒙德,而是拜仁。
-
在添加所有条目后,最好的团队是得分最多的团队。如果两支球队拥有相同的最高分数,则获胜者是最先达到该最高分数的球队。
Dortmund 15", "Bayern 2", "Dortmund 4", "Bayern 20", "Dortmund 3"
两支球队的最高得分相同:22。获胜者是 拜仁,因为它首先达到了最高得分。
-
逻辑就像将当前最大分数与当前总和进行比较一样简单。条件是
sum>max
并且不能sum>=max
保证达到该最大值的第一支球队是赢家。
测试,工作:
Max score winner team :Bayern-[12]