我正在寻找在数据结构中存储值的最佳方法,其中值来自查询三列xxxxxx GROUP BY状态,高度; (即两列)。结果看起来像。

status |  height | count |
--------------------------
InUse  |  90     |   5   |
InUSe  |  80     |   3   |
stock  |  80     |   1   |
stock  |  120    |   3   |
scrap  |  90     |   1   |


现在,我想以某种数据结构或MultiMap或任何最佳方式存储,以便获得计数值。

要么

不管我可以用此值操作的最佳方法。

我想到的一件事是,对于每组唯一的(状态,高度)->计数,我将获得计数的值,以及如何存储它们。

我可以做类似Map< Map<someENUM, List<Long>>, Long>的事情吗
 这对我有帮助吗?
或以其他方式存储和使用此值而不会造成混乱。

status of type ENUM
height of type Long
count of type Long



  编辑:感谢您的答复@Andy Turner,@ OAD和@burhancerit


这些答案在Java中效果很好。但是对于我没有具体说明我所使用的上下文感到抱歉。


  我正在使用的上下文是我要填充HTML表
  jstl / EL中的@Andy Turner建议的番石榴表或@OAD和@ burhancerit建议的ArrayList<myObject>


像这样的东西

status |  height | count |                  Height | stock | Scrap | InUSe
--------------------------                 ---------------------------------
InUse  |  90     |   5   |          HTML      90    |  0    |  1    |   5
InUSe  |  80     |   3   |  ------> Table     80    |  1    |  0    |   3
stock  |  80     |   1   |      using EL      120   |  3    |  0    |   0
stock  |  120    |   3   |
scrap  |  90     |   1   |


因此,现在是在这种情况下以及如何在EL中使用它们的最佳方法。

最佳答案

由于标记了Guava:将其存储在Guava Table中,其中行是状态,列是高度:

Table<String, Long, Long> table;


例如:

// Construction:
ImmutableTable.Builder<String, Long, Long> builder =
    ImmutableTable.builder();
for (RowType row : rows) {
  builder.put(row.getStatus(), row.getHeight(), row.getCount());
}
ImmutableTable<StatusType, HeightType, CountType> table = builder.build();

// Retrieval:
Long count = table.get("InUse", 90L);




要构建您在问题中描述的表,可以使用此答案中建议的表结构,也可以转置该表,使其成为Table(交换行和列)。然后(示例作为普通的控制台输出给出,因为我不熟悉el):

Set<String> statuses = table.columnKeySet();
System.out.print("Height");
for (String status : statuses) {
  System.out.print("|" + status);
}
System.out.println();
for (Long height : table.rowKeySet()) {
  System.out.print(height);
  for (String status : statuses) {
    Long count = Objects.firstNotNull(table.get(height, status), 0L);
    System.out.print("|" + count);
  }
  System.out.println();
}

10-07 16:15
查看更多