Java 番石榴表:当高度和宽度未知且表稀疏时,如何迭代列

Java 番石榴表:当高度和宽度未知且表稀疏时,如何迭代列,java,iteration,guava,Java,Iteration,Guava,我的Java 8代码给出了一个Guava表的实例,其中行和列键是非负整数(0+),每个单元格中的值是一些FizzbuzzPOJO的实例 大多数情况下,表将是通过调用HashBasedTable.create()得到的哈希实现,但不一定总是如此。所以我(真的)需要一个适用于任何表子类的解决方案 因此,我试图对表中的所有行和列进行范围划分,而不提前知道有多少行或列。我迄今为止最好的尝试是: for (Integer rowKey : myTable.rowKeySet()) { int co

我的Java 8代码给出了一个Guava
表的实例,其中行和列键是非负整数(0+),每个单元格中的值是一些
Fizzbuzz
POJO的实例

大多数情况下,
将是通过调用
HashBasedTable.create()
得到的哈希实现,但不一定总是如此。所以我(真的)需要一个适用于任何
子类的解决方案

因此,我试图对表中的所有行和列进行范围划分,而不提前知道有多少行或列。我迄今为止最好的尝试是:

for (Integer rowKey : myTable.rowKeySet()) {
    int colKey = 0;

    Fizzbuzz val;
    while ((val = myTable.get(rowKey, colKey)) != null) {

        // increment colKey
        colKey++;

        // do some processing with the 'val' Fizzbuzz...
    }

}
虽然效率低下且有点不稳定,但这将起作用,除了我的表是有效的稀疏的,这意味着不是每个单元格值/地址(行+列组合)都需要填充。存在
null
s是可以的

我已经翻遍了番石榴表文档和无数的在线示例,在我的一生中,我都不知道如何在表稀疏(允许空值)的情况下正确(有效)地)对行和列进行范围划分有什么想法吗?

您可以使用它来获取
地图

您可以重复此操作:

table.rowMap().forEach((rowKey, row) -> {
  row.forEach((colKey, value) -> {
    // Do something for each row key/col key/value.
  });
});
(Ofc您可以在这里使用增强型for循环。在我的手机上使用
forEach
更简洁)