Извлечение статистики из таблицы Guava с использованием потоков Java - PullRequest
0 голосов
/ 14 мая 2018

С учетом таблицы гуавы Table <Integer, String, WeatherInformation>. Я хотел бы распечатать статистику, сгруппированную по дням недели, используя Java 8.

Класс WeatherInformation имеет методы получения для переменных температуры, снега и дождя. День будний день погодаИнформация

    1   Sunday  Temperature=25, Snow=0, Rain=0

    2   Monday  Temperature=25, Snow=0, Rain=1

    3   Tuesday Temperature=25, Snow=0, Rain=2

    4   Sunday  Temperature=25, Snow=0, Rain=3

    5   Monday  Temperature=25, Snow=0, Rain=4

    6   Friday  Temperature=25, Snow=0, Rain=5

    7   Saturday Temperature=25, Snow=0, Rain=6

    8   Sunday  Temperature=25, Snow=0, Rain=7

    9   Monday  Temperature=25, Snow=0, Rain=8

Print:
Sunday = Count:3, Avg[Temp:25; Snow:0; Rain:3.33]
Monday = Count:3, Avg[Temp:25; Snow:0; Rain:4.33]
Tuesday = Count:1, Avg[Temp:25; Snow:0; Rain: 6]
Friday = Count: 1, Avg[Temp:25; Snow:0; Rain: 5]
Saturday = Count: 1, Avg[Temp:25; Snow:0; Rain: 6]

1 Ответ

0 голосов
/ 15 мая 2018

В конце вы должны агрегировать средние данные, поэтому моя идея состоит в том, чтобы накапливать вашу информацию о погоде в классе держателей, и в конце вы можете печатать любые статистические данные

public static void transform(Table<Integer, String, WeatherInformation> data) {
    Map<String, WeatherInformationStats> result =
            data.cellSet().stream()
                .collect(groupingBy(Cell::getColumnKey,
                                    mapping(Cell::getValue,
                                            reducing(new WeatherInformationStats(),
                                                     WeatherInformationStats::of,
                                                     WeatherInformationStats::plus))));
    // Here you're able to do whatever you want with your cumulative data
    // The data look line: Sunday -> {temperature: 12, snow: 10, rain: 7, count: 3}
}

@Data
public static class WeatherInformation {
    protected int temperature;
    protected int snow;
    protected int rain;

    // Getter/setter
}

@Data
public static class WeatherInformationStats extends WeatherInformation {
    protected int count;

    // Getter setter

    public static WeatherInformationStats of(WeatherInformation source) {
        WeatherInformationStats ws = new WeatherInformationStats();
        ws.setTemperature(source.getTemperature());
        ws.setSnow(source.getSnow());
        ws.setRain(source.getRain());
        ws.setCount(1);
        return ws;
    }

    public WeatherInformationStats plus(WeatherInformationStats source) {
        temperature += source.getTemperature();
        snow += source.getSnow();
        rain += source.getRain();
        count += source.getCount();
        return this;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...