Untitled

mail@pastecode.io avatar
unknown
java
2 years ago
3.9 kB
0
Indexable
Never
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);
            }
        };
    }

}

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;
    }


}