java - 输出最高分
问题描述
我有以下球队名单和他们的分数:
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在这里编写的流方法是流应该如何处理这种场景的完美示例。与此相关的是使用地图,该地图仅用于保存每支球队的总进球数。排序在 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]
推荐阅读
- javascript - 在 React Quill 组件中允许标签
- python - 未知值不断包含在唯一向量中
- java - 在类中创建实例或从外部获取对象,哪个是正确的?
- excel - 如何查看存储在 Office.context.document.settings 中的所有内容?
- javascript - 双击 Kendo Grid 行的 React 组件
- vb.net - 用于在 mysql 数据库中插入日期的自定义日期格式
- machine-learning - 解释分类模型结果
- c# - 在程序集中找不到 System.Media
- apache-kafka-streams - Kafka Streams KTable 状态存储的不同 serde
- python - 对所有轴的 2D Tensorflow 进行排序