Рассчитать средние значения с групповой потоковой передачей java 8 - PullRequest
0 голосов
/ 09 марта 2019

У меня есть список объектов, который содержит 2 атрибута (date and an integer value).Я пытаюсь написать лямбда-функцию Java 8 для фильтрации списка таким образом, чтобы среднее значение времени между 2.00 and 4.00 вычислялось отдельно, а значения между 4.01 and 6.00 вычислялось отдельно независимо от даты

public class Obj{
  private Date date;
  private int value;
}

пример сопоставления объектов выглядит следующим образом

[
{
 date: '2010-02-01 2.00',
 value: 20
},
{
 date: '2010-02-01 4.00',
 value: 5
},
{
 date: '2010-02-02 3.00',
 value: 55
},
{
 date: '2010-02-02 3.30',
 value: 7
},
{
 date: '2010-02-03 5.00',
 value: 88
},
{
 date: '2010-02-03 5.20',
 value: 1
}
]

Здесь значение 20, 5, 55, 7 должно рассчитываться отдельно, поскольку оно существует, когда значение даты находится в диапазоне от 2,00 до 4,00, аналогично 88 and 1 следует вычислятьотдельно, так как эти значения местами, когда время 4,01 и 6,00

Любая помощь будет очень признательна

1 Ответ

0 голосов
/ 09 марта 2019

Чтобы упростить код, измените ваш класс Obj следующим образом

class Obj {
    private String date;
    private int value;
}

и данные содержат только час

Сгруппируйте и уменьшите код следующим образом:

    list.stream()
        .collect(Collectors.groupingBy(new Function<Obj, Integer>() {
            @Override
            public Integer apply(Obj o) {
                return (int) Float.parseFloat(o.getDate()) / 4;
            }
        }, Collectors.summarizingInt(new ToIntFunction<Obj>() {
            @Override
            public int applyAsInt(Obj value) {
                return value.getValue();
            }
        }));
...