Как преобразовать List в HashBasedTable, используя Java 8? - PullRequest
0 голосов
/ 11 февраля 2020

Как мы можем преобразовать Список в HashBasedTable в Java8?

Текущий код выглядит так:

import org.glassfish.jersey.internal.guava.HashBasedTable;
import org.glassfish.jersey.internal.guava.Table;

List<ApplicationUsage> appUsageFromDB = computerDao.findAllCompAppUsages(new HashSet<>(currentBatch));
Table<String, String, Integer> table = HashBasedTable.create();
for(ApplicationUsage au: appUsageFromDB) {
  table.put(au.getId(), au.getName(), au);
}

Мне нужно сохранить составной ключ в этом, а затем получить то же самое.

Ответы [ 2 ]

1 голос
/ 11 февраля 2020

Во-первых, вы никогда не должны полагаться на внутренние пакеты, просто явно добавьте Guava в свой проект. Вы можете использовать Tables#toTable коллектор, если вы хотите иметь изменяемую таблицу в качестве результата, в противном случае неизменной, как представлено в ответе @ Eugene, просто отлично:

import com.google.common.collect.HashBasedTable;
import com.google.common.collect.Table;
import com.google.common.collect.Tables;

// ...

    Table<String, String, ApplicationUsage> table2 = appUsageFromDB.stream()
            .collect(Tables.toTable(
                    ApplicationUsage::getId,
                    ApplicationUsage::getName,
                    au -> au,
                    HashBasedTable::create
            ));

Кроме того, ваш код не компилируется, потому что он ожидает Integer в качестве табличного значения, но вы добавляете ApplicationUsage в свой l oop. При необходимости измените типы и третий аргумент в сборщике таблицы.

1 голос
/ 11 февраля 2020

Если эти внутренние компоненты, по крайней мере, guava-21, вы можете сделать это через их собственный сборщик, но я не вижу ничего плохого в том, что вы делаете с простым l oop.

Table<String, String, ApplicationUsage> result =
        appUsageFromDB.stream()
                      .collect(ImmutableTable.toImmutableTable(
                          ApplicationUsage::getId,
                          ApplicationUsage::getName,
                          Function.identity()
                      ));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...