Распечатайте все ключи и значение для HashBasedTable в Google Guava

Я создаю и заполняю Guava Table с помощью следующего кода:

Table<String, String, Integer> table = HashBasedTable.create();
table.put("A", "B", 1);
table.put("A", "C", 2);
table.put("B", "D", 3);

Интересно, как перебирать таблицу и распечатывать оба ключа и значение для каждой строки? Итак, желаемый результат:

A B 1
A C 2
B D 3

Ответ 1

Im не пользователь Guava, так что это может быть чрезмерным (если это правда, тогда будет рад любой информации), но вы можете использовать table.rowMap() для получения Map<String, Map<String, Integer>>, который будет представлять данные в таблице в форме {A={B=1, C=2}, B={D=3}}. Затем просто перебираем по этой карте:

Map<String, Map<String, Integer>> map = table.rowMap();

for (String row : map.keySet()) {
    Map<String, Integer> tmp = map.get(row);
    for (Map.Entry<String, Integer> pair : tmp.entrySet()) {
        System.out.println(row+" "+pair.getKey()+" "+pair.getValue());
    }
}

или

for (Map.Entry<String, Map<String,Integer>> outer : map.entrySet()) {
    for (Map.Entry<String, Integer> inner : outer.getValue().entrySet()) {
        System.out.println(outer.getKey()+" "+inner.getKey()+" "+inner.getValue());
    }
}

или даже лучше, используя com.google.common.collect.Table.Cell

for (Cell<String, String, Integer> cell: table.cellSet()){
    System.out.println(cell.getRowKey()+" "+cell.getColumnKey()+" "+cell.getValue());
}

Ответ 2

ты можешь использовать:

System.out.println(Arrays.asList(table));

и на выходе будет

[{A={B=1, C=2}, B={D=3}}]