Java 统计"低平球传中"次数案例
下面给你一个完整的 Java 案例,模拟从比赛事件数据中统计低平球传中次数。

需求说明
足球比赛中传中方式分为:
- 高球传中(High Cross)
- 低平球传中(Low Cross) ← 我们要统计的
- 倒三角传中(Cut-back)
目标:从事件列表中筛选出类型为 LOW_CROSS 的事件并计数。
完整代码
import java.util.ArrayList;
import java.util.List;
// 1. 定义传球类型枚举
enum CrossType {
HIGH_CROSS("高球传中"),
LOW_CROSS("低平球传中"),
CUT_BACK("倒三角传中");
private final String desc;
CrossType(String desc) { this.desc = desc; }
public String getDesc() { return desc; }
}
// 2. 事件实体
class MatchEvent {
private String player; // 球员
private int minute; // 分钟
private CrossType type; // 传球类型
private boolean success; // 是否成功
public MatchEvent(String player, int minute, CrossType type, boolean success) {
this.player = player;
this.minute = minute;
this.type = type;
this.success = success;
}
public CrossType getType() { return type; }
public boolean isSuccess() { return success; }
public String getPlayer() { return player; }
public int getMinute() { return minute; }
@Override
public String toString() {
return minute + "' " + player + " - " + type.getDesc()
+ (success ? "(成功)" : "(失败)");
}
}
public class CrossStatistics {
public static void main(String[] args) {
// 3. 模拟比赛事件数据
List<MatchEvent> events = new ArrayList<>();
events.add(new MatchEvent("梅西", 12, CrossType.LOW_CROSS, true));
events.add(new MatchEvent("迪马利亚", 23, CrossType.HIGH_CROSS, false));
events.add(new MatchEvent("梅西", 35, CrossType.LOW_CROSS, false));
events.add(new MatchEvent("阿尔瓦雷斯", 48, CrossType.CUT_BACK, true));
events.add(new MatchEvent("迪马利亚", 60, CrossType.LOW_CROSS, true));
events.add(new MatchEvent("梅西", 75, CrossType.HIGH_CROSS, true));
events.add(new MatchEvent("劳塔罗", 88, CrossType.LOW_CROSS, false));
// 4. 使用 Stream 统计低平球传中次数
long lowCrossCount = events.stream()
.filter(e -> e.getType() == CrossType.LOW_CROSS) // 筛选低平球
.count();
// 5. 顺便统计成功的低平球传中
long lowCrossSuccess = events.stream()
.filter(e -> e.getType() == CrossType.LOW_CROSS && e.isSuccess())
.count();
// 6. 输出结果
System.out.println("=== 低平球传中明细 ===");
events.stream()
.filter(e -> e.getType() == CrossType.LOW_CROSS)
.forEach(System.out::println);
System.out.println("\n低平球传中总次数:" + lowCrossCount);
System.out.println("其中成功次数:" + lowCrossSuccess);
System.out.println("成功率:" +
String.format("%.1f%%", lowCrossSuccess * 100.0 / lowCrossCount));
}
}
运行结果
=== 低平球传中明细 ===
12' 梅西 - 低平球传中(成功)
35' 梅西 - 低平球传中(失败)
60' 迪马利亚 - 低平球传中(成功)
88' 劳塔罗 - 低平球传中(失败)
低平球传中总次数:4
其中成功次数:2
成功率:50.0%
关键点解析
| 步骤 | 说明 |
|---|---|
枚举 CrossType |
用枚举区分三种传中类型,避免字符串硬编码 |
filter + count |
Java 8 Stream 一行搞定计数 |
e.getType() == CrossType.LOW_CROSS |
枚举比较用 即可(唯一实例) |
| 二次统计 | 再叠加 isSuccess() 可算成功率 |
扩展:按球员分组统计低平球传中
如果想看每个球员传了几次低平球传中:
Map<String, Long> byPlayer = events.stream()
.filter(e -> e.getType() == CrossType.LOW_CROSS)
.collect(Collectors.groupingBy(
MatchEvent::getPlayer,
Collectors.counting()));
System.out.println(byPlayer);
// 输出: {梅西=2, 迪马利亚=1, 劳塔罗=1}
如果你有真实的比赛数据源(比如从 Opta、SofaScore 或 JSON 文件读取),可以告诉我格式,我帮你改成从文件里读取统计。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播