Guava Table:当高度和宽度未知且 table 稀疏时如何迭代列
Guava Table: how to iterate over columns when height and width is not known and table is sparse
我的 Java 8 代码给出了一个 Guava Table<Integer,Integer,Fizzbuzz>
的实例,其中行键和列键是非负整数 (0+),每个单元格中的值都是一个实例一些 Fizzbuzz
POJO。
大多数 时间 Table
将是来自调用 HashBasedTable.create()
的散列实现,但这不一定_总是)案子。所以我(真的)需要一个适用于任何 Table
子类的解决方案。
所以我试图遍历 table 的所有行和所有列,但事先不知道有多少行或列。迄今为止我的最佳尝试:
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...
}
}
虽然效率低下而且有些不稳定,但这个 可以 工作,除了对我的 table 有效的事实 稀疏 ,意思是,并非每个单元格 value/address(行 + 列组合)都需要填充。 null
存在就好了。
我查阅了 Guava Table 文档和无数的在线示例,但我终其一生都不知道如何正确(有效地!)在行和列上设置范围 table 是稀疏的(允许空值)。 有什么想法吗?
您可以使用 rowMap()
获得 Map<R, Map<C,V>>
。
你可以重复这个:
table.rowMap().forEach((rowKey, row) -> {
row.forEach((colKey, value) -> {
// Do something for each row key/col key/value.
});
});
(当然你可以在这里使用增强的for循环。只是在我的phone上用forEach
写起来更简洁)。
我的 Java 8 代码给出了一个 Guava Table<Integer,Integer,Fizzbuzz>
的实例,其中行键和列键是非负整数 (0+),每个单元格中的值都是一个实例一些 Fizzbuzz
POJO。
大多数 时间 Table
将是来自调用 HashBasedTable.create()
的散列实现,但这不一定_总是)案子。所以我(真的)需要一个适用于任何 Table
子类的解决方案。
所以我试图遍历 table 的所有行和所有列,但事先不知道有多少行或列。迄今为止我的最佳尝试:
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...
}
}
虽然效率低下而且有些不稳定,但这个 可以 工作,除了对我的 table 有效的事实 稀疏 ,意思是,并非每个单元格 value/address(行 + 列组合)都需要填充。 null
存在就好了。
我查阅了 Guava Table 文档和无数的在线示例,但我终其一生都不知道如何正确(有效地!)在行和列上设置范围 table 是稀疏的(允许空值)。 有什么想法吗?
您可以使用 rowMap()
获得 Map<R, Map<C,V>>
。
你可以重复这个:
table.rowMap().forEach((rowKey, row) -> {
row.forEach((colKey, value) -> {
// Do something for each row key/col key/value.
});
});
(当然你可以在这里使用增强的for循环。只是在我的phone上用forEach
写起来更简洁)。