private void selectAndStoreOutput(IWritableConversationStep currentStep, String action, List<OutputValue> outputValues) {
List<QuickReply> quickReplies = new LinkedList<>();
IntStream.range(0, outputValues.size()).forEach(index -> {
OutputValue outputValue = outputValues.get(index);
List<Object> possibleValueAlternatives = outputValue.getValueAlternatives();
Object randomValue = chooseRandomly(possibleValueAlternatives);
if (randomValue instanceof Map) {
Map<String, String> randomValueMap = new LinkedHashMap<>((Map) randomValue);
randomValueMap.put("type", outputValue.getType());
if (OUTPUT_TYPE_QUICK_REPLY.equals(outputValue.getType())) {
quickReplies.add(new QuickReply(randomValueMap.get(KEY_VALUE), randomValueMap.get(KEY_EXPRESSIONS),
Boolean.parseBoolean(randomValueMap.getOrDefault(KEY_IS_DEFAULT, "false"))));
}
randomValue = randomValueMap;
}
String outputKey = createOutputKey(action, outputValues, outputValue, index);
IData<Object> outputData = dataFactory.createData(outputKey, randomValue, possibleValueAlternatives);
outputData.setPublic(true);
currentStep.storeData(outputData);
currentStep.addConversationOutputList(MEMORY_OUTPUT_IDENTIFIER, Collections.singletonList(randomValue));
});
if (!quickReplies.isEmpty()) {
storeQuickReplies(currentStep, quickReplies, action);
}
}