ハッシュマップの値として合計を置きます

Natalie_eds:

私の二つのリストlist2filetemp同じ長さのものであり、日付と温度が含まれています。リスト内の要素のいくつかを以下に示します。

[1946-01-12, 1946-01-12, 1946-01-12, 1946-01-13, 1946-01-13, 1946-01-13, 1946-01-14, 1946-01-14, 1946-01-14]
[-1.3, 0.3, -2.8, -6.2, -4.7, -4.3, -1.5, -0.2, -0.4]

私は、値としてキーや温度などの日付のハッシュマップに入れたいです。私は、各日付に対応するいくつかの温度値を有しているので、私は、毎日の温度値を合計する(または日ごとの計算平均温度可能であれば)その日の平均温度にマップ対応の各日付ように。私の問題は今、私のマップのように見えるということです。

1946-01-12: -2.8
1946-01-13: -4.3
1946-01-14: -0.4

これに代えて、例えば-1.5 +ために加算する( - 0.2)+( - 0.4)日1946年1月14日のためにそれだけでその日の最後の温度を返します。それを修正する方法を誰もが知っていますか?

public Map<LocalDate, Double> avarageTemperatures(LocalDate dateFrom, LocalDate dateTo) {
    List<LocalDate> list2 = new ArrayList<>();
    for (Weather weather : weatherData) {
        list2.add(weather.getDateTime());
    }

    Map<LocalDate, Double> map = new HashMap<>();
    List<Double> filetemp = new ArrayList<>();
    for (Weather weather : weatherData) {
        filetemp.add(weather.getTemperature());
    }
    Double val= 0.0;
    for (int i=1; i<list2.size(); i++) {
        if(list2.get(i)==list2.get(i-1)) {
            val+= filetemp.get(i);
            map.put(list2.get(i), val);
        } else {
            val=filetemp.get(i);
            map.put(list2.get(i), val);
        }
    }

    Set<Map.Entry<LocalDate, Double>> entrySet = map.entrySet();
    for(Map.Entry<LocalDate,Double> entry : entrySet) {
        if(!entry.getKey().isAfter(dateTo) && !entry.getKey().isBefore(dateFrom)) {
            System.out.println(entry.getKey()+": "+(entry.getValue()));
        }
    }

    return map;
}
ジェイソン:

これは、あなたがそれを行うことができます1つの方法です。あなたは私たちが天気のリストを作成してもらうように天気の一覧は、オブジェクトを取得するには、文字列の配列と二重値の配列を使用してオブジェクト。そのリストから、我々は単に収集コレクターに#groupingByを使用して#この場合にはコレクターである、この場合にはLOCALDATEされ、コレクタが一緒にグループに関連するすべてのキー値を使用している、私たちは、グループにしたいキーを決定することを可能にします我々は、すべての二重の値を合計したいので、summingDouble。

        String[] dates = {
                "1946-01-12", "1946-01-12", "1946-01-12", "1946-01-13", "1946-01-13", "1946-01-13",
                "1946-01-14", "1946-01-14", "1946-01-14"
        };

        double[] temperatures = {-1.3, 0.3, -2.8, -6.2, -4.7, -4.3, -1.5, -0.2, -0.4};

        class Weather {

            private final LocalDate date;

            private final double temperature;

            Weather(LocalDate date, double temperature) {
                this.date = date;
                this.temperature = temperature;
            }

            public LocalDate getDate() {
                return date;
            }

            public double getTemperature() {
                return temperature;
            }
        }

        List<Weather> weather = IntStream.range(0, dates.length)
                .mapToObj(index -> new Weather(LocalDate.parse(dates[index]), temperatures[index]))
                .collect(Collectors.toList());        

       Map<LocalDate, Double> temperaturesSum = weather.stream()
                .collect(Collectors.groupingBy(Weather::getDate,
                        Collectors.summingDouble(Weather::getTemperature)));

        Map<LocalDate, Double> temperaturesAverage = weather.stream()
                .collect(Collectors.groupingBy(Weather::getDate,
                        Collectors.averagingDouble(Weather::getTemperature)));

        System.out.println("sum: " + temperaturesSum);
        System.out.println("average: " + temperaturesAverage);

出力

sum: {1946-01-12=-3.8, 1946-01-13=-15.2, 1946-01-14=-2.1}
average: {1946-01-12=-1.2666666666666666, 1946-01-13=-5.066666666666666, 1946-01-14=-0.7000000000000001}

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=279614&siteId=1