Использование таблиц Guava's Tables.toTable - PullRequest
0 голосов
/ 21 сентября 2018

У меня есть список Thing, содержащий два атрибута: status (перечисление) и owner (другой объект).

Я хочу получить гуаву Table<owner, status, Long>, пройдя по ArrayList и подсчет объектов, включая счет 0, если какого-либо статуса нет в списке, например:

[owner1, status1, 2], [owner1, status2, 0], [owner2, status1, 3], [owner2, status2, 2]

как использовать .collect(Tables.toTable()) в этом случае?

Ответы [ 2 ]

0 голосов
/ 21 сентября 2018

Необходимо предоставить сопоставители для строк, столбцов, значений, функции слияния и поставщика таблиц.Вот как то так:

list.stream().collect(Tables.toTable(
               Thing::getStatus,
               Thing::getOwner,
               t -> 1, //that's your counter
               (i, j) -> i + j, //that's the incrementing function
               HashBasedTable::create //a new table
            ));
0 голосов
/ 21 сентября 2018

Приведенный ниже код создаст таблицу с подсчетами, но без отсчетов .

List<Thing> listOfThings = ...;

Table<Owner, Status, Long> table = 
    listOfThings.stream().collect(
        Tables.toTable(
            Thing::getOwner,             // Row key extractor
            Thing::getStatus,            // Column key extractor
            thing -> 1,                  // Value converter (a single value counts '1')
            (count1, count2) -> count1 + count2, // Value merger (counts add up)
            HashBasedTable::create       // Table creator
        )
    );

Чтобы добавить отсутствующие ячейки в таблицу (с нулевыми значениями), вам потребуется дополнительно выполнить итерацию по всем возможным значениям (из Status и Owner) и поставить 0-значение, если еще нет значения.Обратите внимание, что, если Owner не является перечислением, нет тривиального способа получить все его возможные значения.

Или, вместо этого, вместо этого просто проверьте null s при получении значений изстол.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...