Java8-用于多个搜索条件的嵌套数据结构

时间:2018-11-20 15:23:30

标签: java data-structures java-8 time-series maps

我正在尝试为以下信息创建数据结构,应该在其中出现<1000次(可伸缩性非常好):

  • 时间
  • 服务器
  • 统计
  • 总计

我可以在其中进行查询的地方,

  1. 服务器
  2. STAT 总计是什么
  3. STAT
  4. SERVER TOTAL

我的第一个猜测(确实很丑)将是类似于的嵌套HashMap

HashMap<Long, HashMap<String, HashMap<String, Integer>>

实现上述目标的最佳方法是什么? 我是否错过了更大的前景,应该重新设计我期望如何存储数据?

编辑:一个示例用例如下所示:

Time  | Stat   | Server  | Platform | Count
11:00 | Logins | Server1 | Android  | 10
11:00 | Logins | Server2 | IOS      | 5
12:00 | ERRORS | Server14| IOS      | 8

1 个答案:

答案 0 :(得分:2)

为什么不简单地将单个项目存储在一个对象中,例如,DataPoint具有timetype(例如login)和{{ 1}}。

然后将它们相应地分组。如果它们在内存中,您甚至可以使用platform的{​​{1}} Stream并执行groupingBy来计数每个组的所有出现次数。

因此,如果您有Collector,则可以这样做:

counting()

我不确定时间中的List<DataPoint> list是如何进入故事的,但是如果您想按小时或类似的方式对它们进行分组,则可以在上述操作之前再次做同样的事情。

如果Map<String, Long> countsByType = list.stream() .collect(Collectors.groupingBy(DataPoint::getType, Collectors.counting())); Map<String, Long> countsByPlatform = list.stream() .collect(Collectors.groupingBy(DataPoint::getPlatform, Collectors.counting())); 已经包含聚合,例如Long,则可以将DataPoint替换为total或类似地Collectors.counting()(如果可以获取值)非常大。