Запрашивая DynamoDb GSI Параллельно, используя Java Лямбда-выражение Parallel Stream - PullRequest
0 голосов
/ 30 апреля 2020

Я бы хотел запросить GSI DynamoDB навалом, но пакетные операции для DynamoDB отсутствуют. Вместо этого я пытаюсь распараллелить запрос путем параллельной потоковой передачи списка значений и вызова API запросов DynamoDBMapper.

Ожидается, что я буду использовать Java лямбда-выражение для потоковой передачи коллекции (List в моем случае ) параллельно, а затем запросить DynamoDB, который ожидал вернуть список списка объектов, я бы сгладил их, чтобы получить один список.

У меня есть код, подобный приведенному ниже: Пример кода:

List<String> customerName = {1000+ records};

List<Customer> customerList = customerName.parallelStream()
           .map((custName) -> {

                /* Few other operations to build the QueryExpression 
                   expressing using custName
                */

               // this returns PaginatedQueryList<Customer>
               return  DynamoDBMapper.query(Customer.class, QueryExpression);

           }).flatMap(list -> list.stream()).collect(Collectors.toList());

В приведенном выше коде я ожидаю иметь List<Customer> в качестве выхода, но, похоже, он не работает.

Шаг за шагом фактические выводы:

  1. DynamoDBMapper.query - возвращает PaginatedQueryList<Customer>
  2. .map - возвращает Stream<PaginatedQueryList>
  3. .flatMap - возвращает Stream<Object>
  4. .collect - возвращает Object

Однако я ожидаю, что .flatMap вернет Stream<Customer> и .collect вернет List<Customer>

Не могли бы вы помочь мне определить, что мне здесь не хватает? Спасибо.

...