Вот пример.
Table<DateTime, String, String> yourTable = // your HashBasedTable;
Map<DateTime, List<Map<String, String>>> groupedRows = yourTable.rowMap()
.entrySet()
.stream()
.collect(Collectors.groupingBy(e -> e.getKey().minusMillis(e.getKey().getMillisOfSecond() % 100),
Collectors.mapping(Map.Entry::getValue, Collectors.toList())));
Для того, чтобы использовать поток, я сначала вызываю rowMap
, чтобы получить Map<DateTime, Map<C, V>>
, что является потоком.Поток записей карты.Я группирую их по дате и времени, усеченной до ближайших 100 миллисекунд.Способ усечения: если время составляет 6150 мс, e.getKey().getMillisOfSecond() % 100
дает мне 50 мс, которые я вычитаю, чтобы получить 6100 мс.Таким образом, все времена от 6100 до 6199 миллисекунд сгруппированы вместе.В группировке я использую нисходящий коллектор , чтобы выбрать значения (Map<C, V>
s) из записей для внутренних списков в результате.
Отказ от ответственности: я не получилУстановлены основные библиотеки Guava / Google, поэтому я не все проверил.