All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.github.robertograham.fortnite2.implementation.DefaultStatisticV2 Maven / Gradle / Ivy

The newest version!
package io.github.robertograham.fortnite2.implementation;

import io.github.robertograham.fortnite2.domain.Statistic;

import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.util.Comparator;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
import java.util.stream.Collectors;


final class DefaultStatisticV2 implements Statistic {

    private final long wins;
    private final long matches;
    private final long kills;
    private final long score;
    private final long timesPlacedTop10;
    private final long timesPlacedTop25;
    private final long timesPlacedTop5;
    private final long timesPlacedTop12;
    private final long timesPlacedTop3;
    private final long timesPlacedTop6;
    private final LocalDateTime timeLastModified;
    private final long playersOutlived;
    private final long minutesPlayed;

    DefaultStatisticV2(final Set rawStatistics) {
        final Map summedValuesGroupedByStatType =
            rawStatistics.stream()
                .filter((final var rawStatistic) -> !"lastmodified".equals(rawStatistic.type()))
                .collect(Collectors.groupingBy(
                    RawStatisticV2::type,
                    Collectors.summingLong(RawStatisticV2::value)
                ));
        wins = summedValuesGroupedByStatType.getOrDefault("placetop1", 0L);
        matches = summedValuesGroupedByStatType.getOrDefault("matchesplayed", 0L);
        kills = summedValuesGroupedByStatType.getOrDefault("kills", 0L);
        score = summedValuesGroupedByStatType.getOrDefault("score", 0L);
        timesPlacedTop10 = summedValuesGroupedByStatType.getOrDefault("placetop10", 0L);
        timesPlacedTop25 = summedValuesGroupedByStatType.getOrDefault("placetop25", 0L);
        timesPlacedTop5 = summedValuesGroupedByStatType.getOrDefault("placetop5", 0L);
        timesPlacedTop12 = summedValuesGroupedByStatType.getOrDefault("placetop12", 0L);
        timesPlacedTop3 = summedValuesGroupedByStatType.getOrDefault("placetop3", 0L);
        timesPlacedTop6 = summedValuesGroupedByStatType.getOrDefault("placetop6", 0L);
        timeLastModified = rawStatistics.stream()
            .filter(rawStatistic -> "lastmodified".equals(rawStatistic.type()))
            .max(Comparator.comparingLong(RawStatisticV2::value))
            .map((final var rawStatistic) ->
                LocalDateTime.ofInstant(
                    Instant.ofEpochSecond(rawStatistic.value()),
                    ZoneOffset.UTC
                )
            )
            .orElse(LocalDateTime.MIN);
        playersOutlived = summedValuesGroupedByStatType.getOrDefault("playersoutlived", 0L);
        minutesPlayed = summedValuesGroupedByStatType.getOrDefault("minutesplayed", 0L);
    }

    @Override
    public long wins() {
        return wins;
    }

    @Override
    public long matches() {
        return matches;
    }

    @Override
    public long kills() {
        return kills;
    }

    @Override
    public long score() {
        return score;
    }

    @Override
    public long timesPlacedTop10() {
        return timesPlacedTop10;
    }

    @Override
    public long timesPlacedTop25() {
        return timesPlacedTop25;
    }

    @Override
    public long timesPlacedTop5() {
        return timesPlacedTop5;
    }

    @Override
    public long timesPlacedTop12() {
        return timesPlacedTop12;
    }

    @Override
    public long timesPlacedTop3() {
        return timesPlacedTop3;
    }

    @Override
    public long timesPlacedTop6() {
        return timesPlacedTop6;
    }

    @Override
    public LocalDateTime timeLastModified() {
        return timeLastModified;
    }

    @Override
    public long playersOutlived() {
        return playersOutlived;
    }

    @Override
    public long minutesPlayed() {
        return minutesPlayed;
    }

    @Override
    public String toString() {
        return "DefaultStatisticV2{" +
            "wins=" + wins +
            ", matches=" + matches +
            ", kills=" + kills +
            ", score=" + score +
            ", timesPlacedTop10=" + timesPlacedTop10 +
            ", timesPlacedTop25=" + timesPlacedTop25 +
            ", timesPlacedTop5=" + timesPlacedTop5 +
            ", timesPlacedTop12=" + timesPlacedTop12 +
            ", timesPlacedTop3=" + timesPlacedTop3 +
            ", timesPlacedTop6=" + timesPlacedTop6 +
            ", timeLastModified=" + timeLastModified +
            ", playersOutlived=" + playersOutlived +
            ", minutesPlayed=" + minutesPlayed +
            '}';
    }

    @Override
    public boolean equals(final Object object) {
        if (this == object)
            return true;
        if (!(object instanceof DefaultStatisticV2))
            return false;
        final var defaultStatisticV2 = (DefaultStatisticV2) object;
        return wins == defaultStatisticV2.wins &&
            matches == defaultStatisticV2.matches &&
            kills == defaultStatisticV2.kills &&
            score == defaultStatisticV2.score &&
            timesPlacedTop10 == defaultStatisticV2.timesPlacedTop10 &&
            timesPlacedTop25 == defaultStatisticV2.timesPlacedTop25 &&
            timesPlacedTop5 == defaultStatisticV2.timesPlacedTop5 &&
            timesPlacedTop12 == defaultStatisticV2.timesPlacedTop12 &&
            timesPlacedTop3 == defaultStatisticV2.timesPlacedTop3 &&
            timesPlacedTop6 == defaultStatisticV2.timesPlacedTop6 &&
            playersOutlived == defaultStatisticV2.playersOutlived &&
            minutesPlayed == defaultStatisticV2.minutesPlayed &&
            timeLastModified.equals(defaultStatisticV2.timeLastModified);
    }

    @Override
    public int hashCode() {
        return Objects.hash(wins, matches, kills, score, timesPlacedTop10, timesPlacedTop25, timesPlacedTop5, timesPlacedTop12, timesPlacedTop3, timesPlacedTop6, timeLastModified, playersOutlived, minutesPlayed);
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy