Сборщик Java 8 для неизменного стола Guava

Случай использования:
Обработка списка строк с помощью метода, который возвращаетImmutableTable типа{R,C,V}, НапримерImmutableTable of {Integer,String,Boolean} process(String item){...}

Собрать результат, т.е. объединить все результаты и вернутьImmutableTable, Есть ли способ добиться этого?

Текущая реализация (как предложено Богемским):

Как насчет использования параллельного потока? Есть ли проблемы с параллелизмом в приведенном ниже коде? С параллельным потоком я получаю «NullPointerException при индексе 1800» на tableBuilder.build (), но отлично работает с потоком.

ImmutableTable<Integer, String, Boolean> buildData() {   

  // list of 4 AwsS3KeyName   
listToProcess.parallelStream() 

  //Create new instance via Guice dependency injection 
.map(s3KeyName -> ProcessorInstanceProvider.get()    
.fetchAndBuild(s3KeyName)) 
.forEach(tableBuilder::putAll); 

 return tableBuilder.build(); }

Хотя ниже код работает отлично с потоком, а также параллельным потоком. Но ImmutableBuild терпит неудачу из-за двойной записи для строки и столбца. Что может быть лучшим способом предотвращения дублирования при объединении таблиц?

public static <R, C, V> Collector<ImmutableTable<R, C, V>,     
ImmutableTable.Builder<R, C, V>, ImmutableTable<R, C, V>>   
toImmutableTable() 
{ 
return Collector.of(ImmutableTable.Builder::new, 
ImmutableTable.Builder::putAll, (builder1, builder2) -> 
builder1.putAll(builder2.build()), ImmutableTable.Builder::build); }

Редактировать: если в ImmutableTable.Builder есть дублирующаяся запись при объединении разных таблиц, произойдет сбой,

Попытка избежать фальши путем помещения ImmutableTables в HashBasedTable

  ImmutableTable.copyOf(itemListToProcess.parallelStream()
            .map(itemString ->
           ProcessorInstanceProvider.get()
                    .buildImmutableTable(itemString))
                    .collect(
                            Collector.of(
                                    HashBasedTable::create,
                                    HashBasedTable::putAll,
                                    (a, b) -> {
                                        a.putAll(b);
                                        return a;
                                    }));
  )

Но я получаю исключение во время выполнения "Причины: java.lang.IllegalAccessError: попытался получить доступ к классу com.google.common.collect.AbstractTable".

Как мы можем использовать HashBasedTable в качестве Accumulator для сбора ImmutablesTables, так как HashBasedTable переопределяет существующую запись последней и не завершается ошибкой, если мы пытаемся поместить дублирующую запись и вернуть агрегированную таблицу Immutable.

Ответы на вопрос(3)

Ваш ответ на вопрос