package design.model; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Objects; public class Team { private String name; private final List members; private final Map memberBestRounds; public Team(String name) { this.name = name; this.members = new ArrayList<>(); this.memberBestRounds = new HashMap<>(); } public String getName() { return name; } public Golfer[] getMembers() { return members.toArray(Golfer[]::new); } public void setName(String name) { this.name = name; } public boolean addMember(Golfer golfer) { if(members.size() >= 4){ throw new IllegalArgumentException("Team size limit reached!"); } return members.add(golfer); } public boolean removeMember(Golfer g) { memberBestRounds.remove(g); return members.remove(g); } public void addMemberRound(Golfer g, int strokes){ memberBestRounds.merge(g, strokes, Math::min); } public int computeTotalBestScore(){ if(memberBestRounds.isEmpty()) return 100; // Bad Score Penalty for not playing return memberBestRounds.values().stream().min(Integer::compareTo).orElse(100); } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null || getClass() != obj.getClass()) return false; Team other = (Team) obj; return Objects.equals(name, other.name); } @Override public int hashCode() { return Objects.hash(name); } }