Events
unknown
java
3 years ago
3.2 kB
6
Indexable
package ee.ttu.algoritmid.events; import java.util.*; public class Events { private final int maxParticipants; // Key: Event, Value: Participants private final Map<Event, Integer> eventsMap = new HashMap<>(); public Events(int maxParticipants) { this.maxParticipants = maxParticipants; } public void registerParticipant(String eventName, int eventLengthMinutes, boolean freeTickets) { Event event = new Event(eventName, eventLengthMinutes, freeTickets); eventsMap.putIfAbsent(event, 0); if (eventsMap.get(event) < maxParticipants) { eventsMap.put(event, eventsMap.get(event) + 1); } } public int eventPopularity(String eventName, int eventLengthMinutes, boolean freeTickets) { Event event = new Event(eventName, eventLengthMinutes, freeTickets); if (eventsMap.get(event) != null) { return eventsMap.get(event); } return 0; } public int getTop1Participants() { Collection<Integer> eventParticipants = eventsMap.values(); try { return Collections.max(eventParticipants); } catch (NoSuchElementException e) { // No events exist, return 0 return 0; } } public List<Integer> getTop2Participants() { Collection<Integer> eventParticipants = eventsMap.values(); List<Integer> participantList = new ArrayList<>(eventParticipants); participantList.sort(Collections.reverseOrder()); if (participantList.size() == 2) { return participantList; } if (participantList.size() > 2) { return participantList.subList(0, 2); } if (participantList.size() == 1) { // only 1 event exists return that events popularity and a 0 participantList.add(0); return participantList; } // No events exist return list of [0, 0] return new ArrayList<Integer>() { { add(0); add(0); } }; } } class Event { private final String eventName; private final boolean freeTickets; private final int eventLengthInMinutes; private final int hashCode; public Event(String eventName, int eventLengthMinutes, boolean freeTickets) { this.eventName = eventName; this.eventLengthInMinutes = eventLengthMinutes; this.freeTickets = freeTickets; this.hashCode = Objects.hash(eventName, eventLengthMinutes, freeTickets); } //https://www.baeldung.com/java-custom-class-map-key @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Event that = (Event) o; return eventName == that.eventName && eventLengthInMinutes == that.eventLengthInMinutes && freeTickets == that.freeTickets; } @Override public int hashCode() { return this.hashCode; } }
Editor is loading...