refactor passedStations and members to be of type List instead of Map, as a key is not needed

This commit is contained in:
2025-12-18 15:33:44 +01:00
parent b5033f6ce2
commit 7f6f6c8ea8

View File

@@ -4,8 +4,8 @@ import jakarta.persistence.*;
import lombok.*;
import java.util.HashMap;
import java.util.Map;
import java.util.List;
import java.util.ArrayList;
import java.util.UUID;
@Entity
@@ -25,31 +25,31 @@ public class Team {
private List<Racer> members;
@OneToMany(cascade = CascadeType.ALL)
private Map<String, Station> passedStations;
private List<Station> passedStations;
public Team(){
this.teamName = null;
this.firstSemesterTeam = true;
this.members = new HashMap<>(4);
this.passedStations = new HashMap<>();
this.members = new ArrayList<>(4);
this.passedStations = new ArrayList<>();
}
public Team(String teamName, boolean firstSemesterTeam, Map<String, Racer> members, Map<String, Station> passedStations){
public Team(String teamName, boolean firstSemesterTeam, List<Racer> members, List<Station> passedStations){
this.teamName = teamName;
this.firstSemesterTeam = firstSemesterTeam;
this.members = new HashMap<>(members.size());
this.members.putAll(members);
this.passedStations = new HashMap<>(passedStations.size());
this.passedStations.putAll(passedStations);
this.members = new ArrayList<>(members.size());
this.members.addAll(members);
this.passedStations = new ArrayList<>(passedStations.size());
this.passedStations.addAll(passedStations);
}
/**
* Treat this team as a team of first semester students, if at least 50% of its members are in the first semester
*/
private void checkFirstSemesterTeam(){
long erstiCount = members.entrySet().stream()
long erstiCount = members.stream()
.filter(
e -> e.getValue().getIsFirstSemester()
Racer::getIsFirstSemester
).count();
double percentFirstSemester = erstiCount /(double)members.size();
this.firstSemesterTeam = percentFirstSemester >= 0.5;
@@ -60,7 +60,8 @@ public class Team {
* @param newMember the Racer object to be added to the team
*/
public void addMember(Racer newMember){
this.members.put(String.format("%s, %s", newMember.getLastName(), newMember.getFirstName()), newMember );
this.members.add(newMember);
newMember.setMemberTeam(this);
this.checkFirstSemesterTeam();
}
@@ -70,11 +71,9 @@ public class Team {
* @param lastName the last name of the racer to be removed
*/
public void removeMember(String firstName, String lastName){
this.members.remove(this.generateMapKeyFromName(firstName, lastName));
this.members.forEach(racer ->{
if(firstName.equals(racer.getFirstName()) && lastName.equals(racer.getLastName())) members.remove(racer);
});
this.checkFirstSemesterTeam();
}
private String generateMapKeyFromName(String firstName, String lastName){
return String.format("%s, %s", firstName, lastName);
}
}