Untitled
unknown
java
3 years ago
4.6 kB
7
Indexable
package ee.ttu.algoritmid.events;
import java.util.*;
public class Events {
private final int maxParticipants;
private final Map<Event, Integer> eventsMap = new HashMap<>();
public Events(int maxParticipants) { // mitu osalejat on
this.maxParticipants = maxParticipants; // mitu max saab olla eventis
}
public void registerParticipant(String eventName, int eventLengthMinutes, boolean freeTickets) {
Event event = new Event(eventName, eventLengthMinutes, freeTickets);
eventsMap.putIfAbsent(event, 0); //kui map on tühi, siis paneb esimeseks osalejate väärtuseks 0
if (eventsMap.get(event) < maxParticipants) { //kui osalejate arv vaiksem kui max
eventsMap.put(event, eventsMap.get(event) + 1); //ainult siis liida üks osaleja juurde
}
}
public int eventPopularity(String eventName, int eventLengthMinutes, boolean freeTickets) {
Event event = new Event(eventName, eventLengthMinutes, freeTickets);
if (eventsMap.get(event) != null) { //kui osalejate arv ei ole null, siis väljasta osalejate arv
return eventsMap.get(event);
}
return 0;
}
public int getTop1Participants() {
Collection<Integer> eventParticipants = eventsMap.values(); //teen objekti eventidest ja osalejate arvust
try {
return Collections.max(eventParticipants);
} catch (NoSuchElementException e) {
return 0; // kui pole evente siis return 0
}
}
public List<Integer> getTop2Participants() { // top2 kõige suurema osalejate arvuga evendid
Collection<Integer> eventParticipants = eventsMap.values();
List<Integer> participantList = new ArrayList<>(eventParticipants); //panen objecti arrayListi, et saaksin sortida
Collections.sort(participantList, Collections.reverseOrder()); //sordin ära, kahanevas järjekorras
if (participantList.size() == 2) {
return participantList;
}
if (participantList.size() > 2) {
return participantList.subList(0, 2); //võtab listist 0 ja 1 indeksi ehk 2 suurimat osalejate arvuga eventi
}
if (participantList.size() == 1) { //kui on ainult 1 event, siis väljasta selle osalejate arv
participantList.add(0); //lisa listi 0
return participantList;
}
return new ArrayList<>() { //kui pole ühtegi eventi siis lisab kaks nulli
{
add(0);
add(0);
}
};
}
public static void main(String[] args) {
Events events = new Events(4);
events.registerParticipant("Cool Event", 10, false);
events.registerParticipant("Cool Event", 10, false);
events.registerParticipant("Cool Event", 10, false);
events.registerParticipant("Cool Event", 10, false);
events.registerParticipant("Not So Cool Event", 10, false);
events.registerParticipant("Not So Cool Event", 10, false);
System.out.println(events.eventPopularity("Cool Event", 10, false));
System.out.println(events.getTop1Participants());
System.out.println(events.getTop2Participants());
}
}
class Event { //klass ühe ürituse jaoks, mis sisldab kolme muutujat (returnib hashcode-i, mida kasutan hashmapi keyna)
private final String eventName;
private final boolean freeTickets;
private final int eventLengthInMinutes;
private final int hashCode; //et ülemised kolm muutujat üheks liita (üks ID ehk key kogu eventile, mille value on: mitu osalejat seal on)
public Event(String eventName, int eventLengthMinutes, boolean freeTickets) {
this.eventName = eventName;
this.eventLengthInMinutes = eventLengthMinutes;
this.freeTickets = freeTickets;
this.hashCode = Objects.hash(eventName, eventLengthMinutes, freeTickets); //kõik ülemised kolm siia kokku üheks
}
@Override //lisa meetod hashcode genereerimiseks
public boolean equals(Object o) {
if (this == o)
return true;
if (o == null || getClass() != o.getClass())
return false;
Event that = (Event) o;
return eventName.equals(that.eventName) && eventLengthInMinutes == that.eventLengthInMinutes && freeTickets == that.freeTickets;
}
@Override //lisa meetod hashcode genereerimiseks
public int hashCode() {
return this.hashCode;
}
}
Editor is loading...