首页 > 解决方案 > 输出最高分

问题描述

我有以下球队名单和他们的分数:

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

该代码只是将每个团队的分数相加并将其保存在地图上。我无法改变我需要的方式。

标签: java

解决方案


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 RudenkoNikolas Charalambidis在这里编写的流方法是流应该如何处理这种场景的完美示例。与此相关的是使用地图,该地图仅用于保存每支球队的总进球数。排序在 arraylist 迭代中是隐含的。hashmap 从未参与任何类型的排序。

    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]

在此处输入图像描述


推荐阅读