java案例怎么看两队的历史交锋记录?

wen java案例 3

Java 案例:查看两队历史交锋记录

下面给你一个完整的 Java 案例,模拟"查看两支球队历史交锋记录"的功能。

java案例怎么看两队的历史交锋记录?

需求分析

一支球队的历史交锋记录通常包含:

  • 主队、客队
  • 比赛日期
  • 主队进球、客队进球
  • 比赛结果(胜/平/负)

功能:

  1. 录入/初始化历史比赛数据
  2. 根据两队名称查询所有交锋记录
  3. 统计两队的胜平负场次

实体类 Match

import java.time.LocalDate;
public class Match {
    private String homeTeam;   // 主队
    private String awayTeam;   // 客队
    private LocalDate date;    // 比赛日期
    private int homeGoals;     // 主队进球
    private int awayGoals;     // 客队进球
    public Match(String homeTeam, String awayTeam, LocalDate date, int homeGoals, int awayGoals) {
        this.homeTeam = homeTeam;
        this.awayTeam = awayTeam;
        this.date = date;
        this.homeGoals = homeGoals;
        this.awayGoals = awayGoals;
    }
    // 判断是否是这两支球队之间的比赛(不考虑主客)
    public boolean isBetween(String teamA, String teamB) {
        return (homeTeam.equals(teamA) && awayTeam.equals(teamB))
            || (homeTeam.equals(teamB) && awayTeam.equals(teamA));
    }
    // 返回比分字符串
    public String getScore() {
        return homeGoals + " : " + awayGoals;
    }
    // 从指定球队视角返回结果:W胜 / D平 / L负
    public String getResultFor(String team) {
        int teamGoals = homeTeam.equals(team) ? homeGoals : awayGoals;
        int oppGoals  = homeTeam.equals(team) ? awayGoals : homeGoals;
        if (teamGoals > oppGoals) return "W";
        if (teamGoals < oppGoals) return "L";
        return "D";
    }
    @Override
    public String toString() {
        return String.format("%s  %s  %d - %d  %s",
                date, homeTeam, homeGoals, awayGoals, awayTeam);
    }
    // getter
    public String getHomeTeam() { return homeTeam; }
    public String getAwayTeam() { return awayTeam; }
    public LocalDate getDate()  { return date; }
}

业务类 MatchService

import java.util.*;
import java.util.stream.Collectors;
public class MatchService {
    private final List<Match> matches = new ArrayList<>();
    // 添加一场比赛
    public void addMatch(Match m) {
        matches.add(m);
    }
    // 查询两队所有交锋记录(按日期升序)
    public List<Match> getHeadToHead(String teamA, String teamB) {
        return matches.stream()
                .filter(m -> m.isBetween(teamA, teamB))
                .sorted(Comparator.comparing(Match::getDate))
                .collect(Collectors.toList());
    }
    // 打印两队交锋记录 + 胜平负统计
    public void printHeadToHead(String teamA, String teamB) {
        List<Match> h2h = getHeadToHead(teamA, teamB);
        System.out.println("===== " + teamA + " vs " + teamB + " 历史交锋 =====");
        if (h2h.isEmpty()) {
            System.out.println("暂无交锋记录");
            return;
        }
        int winA = 0, winB = 0, draw = 0;
        for (Match m : h2h) {
            System.out.println(m);
            String r = m.getResultFor(teamA);
            if ("W".equals(r)) winA++;
            else if ("L".equals(r)) winB++;
            else draw++;
        }
        System.out.println("-----------------------------------------");
        System.out.printf("共 %d 场:%s 胜 %d 场,平 %d 场,%s 胜 %d 场%n",
                h2h.size(), teamA, winA, draw, teamB, winB);
    }
}

测试主类 Main

import java.time.LocalDate;
public class Main {
    public static void main(String[] args) {
        MatchService service = new MatchService();
        // 模拟历史数据
        service.addMatch(new Match("皇家马德里", "巴塞罗那", LocalDate.of(2023, 3, 19), 2, 1));
        service.addMatch(new Match("巴塞罗那", "皇家马德里", LocalDate.of(2023, 10, 28), 1, 2));
        service.addMatch(new Match("皇家马德里", "巴塞罗那", LocalDate.of(2024, 1, 14), 4, 1));
        service.addMatch(new Match("巴塞罗那", "皇家马德里", LocalDate.of(2024, 4, 21), 3, 2));
        // 其它比赛,不应被查到
        service.addMatch(new Match("曼城", "利物浦", LocalDate.of(2024, 2, 10), 1, 1));
        // 查看皇马 vs 巴萨 历史交锋
        service.printHeadToHead("皇家马德里", "巴塞罗那");
    }
}

运行结果

===== 皇家马德里 vs 巴塞罗那 历史交锋 =====
2023-03-19  皇家马德里  2 - 1  巴塞罗那
2023-10-28  巴塞罗那  1 - 2  皇家马德里
2024-01-14  皇家马德里  4 - 1  巴塞罗那
2024-04-21  巴塞罗那  3 - 2  皇家马德里
-----------------------------------------
共 4 场:皇家马德里 胜 3 场,平 0 场,巴塞罗那 胜 1 场

关键设计点

环节 说明
数据存储 用 List<Match> 保存所有比赛,简单直观
交锋过滤 isBetween 忽略主客队顺序,两队在哪都算交锋
结果统计 getResultFor(team) 站在指定球队视角返回 W/D/L
排序 sorted(Comparator.comparing(Match::getDate)) 按时间线展示
聚合 Java Stream 一行完成"过滤 + 排序 + 收集"

可扩展方向

  1. 接数据库:把 List 换成 JDBC / MyBatis / JPA 查询,SQL 例子:
    SELECT * FROM match
    WHERE (home_team=? AND away_team=?)
       OR (home_team=? AND away_team=?)
    ORDER BY match_date;
  2. API 接口:用 Spring Boot 暴露 GET /h2h?teamA=...&teamB=...
  3. 更多维度统计:进球总数、场均进球、N 场走势
  4. 缓存:热门球队交锋结果可加 Map<String, List<Match>> 缓存

如果你要的是具体的某个平台(比如足球经理游戏、某个 App、某 API),可以告诉我是哪个,我给你对应的实现方式。

抱歉,评论功能暂时关闭!