Группировка данных по часам - PullRequest
0 голосов
/ 25 июня 2019

У меня есть список объектов, которые содержат время генерации поля, в котором я сохраняю время в длинном формате с помощью функции System.currentTimeInMills(). Данные выглядят как ниже:

List<MyObject> myObj = Arrays.asList(
    new MyObject(time="1561473186140", name="123", status=200)
    new MyObject(time="1561473186123", name="ABC", status=200)
    new MyObject(time="1561473183435", name="ABC", status=200)
    new MyObject(time="1561473185666", name="123", status=200)
    new MyObject(time="1561473186132", name="ABC", status=200)
    new MyObject(time="1561473183423", name="ABC", status=200)
    new MyObject(time="1561473184242", name="123", status=200)
    new MyObject(time="1561473186190", name="ABC", status=200)
    new MyObject(time="1561473186098", name="ABC", status=200)
);

Теперь мне нужно сгруппировать данные по часовым базам. Например, с 10:00 до 11:00, сколько объектов, например, с 11:00 до 12:00 и т. Д. Итак, как мне достичь этого с помощью Java 8 Stream API.

Ответы [ 2 ]

1 голос
/ 26 июля 2019

Если вы хотите, чтобы группа объектов сгруппировалась по часам:

Map<Integer, List<MyObject>> result = myObj.stream().collect(Collectors.groupingBy(o -> LocalDateTime.ofInstant(Instant.ofEpochMilli(o.getTimestamp()), ZoneId.systemDefault()).getHour()));

Если вам нужно только количество объектов, а не сами объекты:

myObj.stream().collect(Collectors.groupingBy(o -> LocalDateTime.ofInstant(Instant.ofEpochMilli(o.getTimestamp()), ZoneId.systemDefault()).getHour(), Collectors.counting()));
1 голос
/ 27 июня 2019

Попробуйте это:

Map<Integer, List<MyObject>> result = list.stream()
        .collect(Collectors.groupingBy(o -> Instant.ofEpochMilli(o.getTime())
                .atZone(ZoneOffset.UTC).getHour()));

result.forEach((hour, objects) -> 
        System.out.println(hour + " - " + (hour + 1) + ": " + objects));

При этом используется API времени Java для получения часов этой метки времени.Измените часовой пояс в соответствии со своими потребностями.

...