java - 根据 DateTime 行对 HashBasedTable 条目进行分组

标签 java algorithm datetime grouping hashtable

我有一个 HashBasedTable ( com.google.common.collect.HashBasedTable ),格式如下: Table<DateTime, C, V> . DateTime来自org.joda.time.DateTime .

我想根据特定的时间间隔对条目进行分组。例如,如果条目 A 和 B 彼此相差在 100 毫秒以内,我想将它们组合在同一行中。我可以选择在插入时以及在处理过程中插入后执行此操作。我应该如何以最有效的方式执行此操作?

引用链接:

https://google.github.io/guava/releases/19.0/api/docs/com/google/common/collect/HashBasedTable.html

https://www.joda.org/joda-time/apidocs/org/joda/time/DateTime.html

最佳答案

这是一个例子。

    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 核心库,所以我没有测试所有内容。

关于java - 根据 DateTime 行对 HashBasedTable 条目进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55111260/

相关文章:

java - 如何根据需要生成文件名?

algorithm - 颜色列表中最接近的 RGB 颜色

sql - 在 PostgreSQL 中添加负间隔

perl - DateTime::Format::CLDR 解析长捷克日期时出现问题

java - 如何在java中从B类中打印A类的数组?

java - 为什么 Class.getDeclaredFields() 意外地按字母顺序排序?

java - 如何从 Java 中的 SOAP 响应中提取数据?

c++ - 查找字符串是否包含字符串 vector 的任何一个元素的最佳方法

python - 识别具有最小欧氏距离的点

javascript - 日期时间格式为友好时间。瞬间JS输出错误