Я бы хотел запросить 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>
в качестве выхода, но, похоже, он не работает.
Шаг за шагом фактические выводы:
DynamoDBMapper.query
- возвращает PaginatedQueryList<Customer>
.map
- возвращает Stream<PaginatedQueryList>
.flatMap
- возвращает Stream<Object>
.collect
- возвращает Object
Однако я ожидаю, что .flatMap
вернет Stream<Customer>
и .collect
вернет List<Customer>
Не могли бы вы помочь мне определить, что мне здесь не хватает? Спасибо.