Мне нужен способ проверить каждый экземпляр переменной, связанный с доступным ответом, с помощью декартового алгоритма пJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Мне нужен способ проверить каждый экземпляр переменной, связанный с доступным ответом, с помощью декартового алгоритма п

Сообщение Anonymous »

По сути, я работаю на Java, и у меня есть метод, который должен выводить во внешнем интерфейсе несколько экземпляров переменных, каждый из которых имеет список доступных ответов. Моя проблема в том, что переменные зависят друг от друга, существующие в иерархический способ. Я создаю первый и применяю некоторые доступные ответы. Я создаю второй и применяю еще несколько avilableAnswers, но они появятся только в том случае, если я поместил доступный ответ, который происходит из первого (availableAnswers имеет 2 параметра: первый из предыдущих переменныхInstance, а второй - тот, который появится в вторая переменнаяInstance. У меня также есть третья, которая выводит avilableAnswer, который представляет собой комбинацию первой + второй переменнойInstances AvailableAnswer (я пытаюсь сделать это как можно более ясным)
Моя проблема в том, что в моем методе все равно что я всегда получаю зависимость, исходящую только от 1 переменнойIsntances, что означает, что я вывожу только комбинацию из 1 комбинации доступных ответов, первый или последний доступный ответ переменнойInstance запускает зависимость комбинации. не получаю все возможные комбинации. Может кто-нибудь мне помочь?

Код: Выделить всё

private Questionnaire selectById(SlimFilter filter, boolean showHiddenVars, Set ignoreFields) throws Exception {
Questionnaire questionnaire = super.selectById(filter);

if (ObjectUtils.isNotVoid(questionnaire)) {
questionnaire = questionnaireExtender.extendObject(questionnaire, ignoreFields);

if (ListUtils.isNotVoid(questionnaire.getVariableInstancesEntity())) {
questionnaire.getVariableInstancesEntity().sort(Comparator.comparing(VariableInstanceBase::getPosition));

// Nascondo le VariableInstance con hidden=true
if (!showHiddenVars) {
hiddenVarInstance(questionnaire.getVariableInstancesEntity());
}

Map questAnswersMap = new HashMap();
Map variableAnswerMap = new HashMap();

for (VariableInstance var : questionnaire.getVariableInstancesEntity()) {
if (ObjectUtils.isNotVoid(var.getFixedValue())) {
AnswerValue v = new AnswerValue();
v.setVariableInstanceId(var.getId());
v.setAvailableAnswerId(var.getFixedValue());
questAnswersMap.put(var.getId(), v);
}
}

for (VariableInstance var : questionnaire.getVariableInstancesEntity()) {
try {
System.out.println("Processing VariableInstance: " + var.getDescription() + "--------------------");

List listAnswersId = questAnswerNextAnswerService.evaluateRestriction(var.getLogicMapData(), var.getRestrictions(), questAnswersMap);
System.out.println("listAnswersId: " + listAnswersId);

if (listAnswersId != null && !listAnswersId.isEmpty()) {
variableAnswerMap.put(var.getId(), listAnswersId);
System.out.println("variableAnswerMap: " + variableAnswerMap);

SlimPaginatorFilter restQuestFilter = new SlimPaginatorFilter();
FilterUtils.addSlimMatch(restQuestFilter, AvailableAnswer.COLUMNS.ID, SlimMatchOperator.IN, listAnswersId.toArray());
FilterUtils.addSlimOrder(restQuestFilter, AvailableAnswer.COLUMNS.CODE, SlimOrderDirection.ASC);
List restrictionAnswers = availableAnswerService.list(restQuestFilter);
System.out.println("restrictionAnswers: " + restrictionAnswers);

List correctOrderAnswers = new ArrayList();
for (Object answerId : listAnswersId) {
for (AvailableAnswer answer : restrictionAnswers) {
if (answer.getId().equals(answerId)) {
correctOrderAnswers.add(answer);
}
}
}
var.setAvailableAnswers(correctOrderAnswers);
System.out.println("correctOrderAnswers: " + correctOrderAnswers);

for (Object answerId : listAnswersId) {
AnswerValue answerValue = new AnswerValue();
answerValue.setVariableInstanceId(var.getId());
answerValue.setAvailableAnswerId(answerId.toString());
questAnswersMap.put(var.getId(), answerValue);
}
System.out.println("questAnswersMap: " + questAnswersMap);

} else {
List  paramsVarList = new ArrayList();
for (VariableInstanceRestriction restriction : var.getRestrictions()) {
for (VariableInstanceRestrictionParam param : restriction.getRestrictionParamsEntity()) {
String varInstanceId = param.getVariableInstanceId();
if (!questAnswersMap.containsKey(varInstanceId)) {
if (variableAnswerMap.containsKey(varInstanceId)) {
paramsVarList.add(varInstanceId);
}
}
}
}
System.out.println("paramsVarList: " + paramsVarList);

List paramValuesList = new ArrayList();
if (!paramsVarList.isEmpty()) {
for (String variableParam : paramsVarList) {
List values = variableAnswerMap.get(variableParam);
if (values != null && !values.isEmpty()) {
paramValuesList.add(values);
}
}
}
System.out.println("paramValuesList: " + paramValuesList);

List paramValuesListCombinations = getCartesianProductUsingStreams(paramValuesList);
System.out.println("paramValuesListCombinations: " + paramValuesListCombinations);

Set listAnswersIdSet = new HashSet();

for (List valueCombination : paramValuesListCombinations) {
for (int i = 0; i < valueCombination.size(); i++) {
AnswerValue answerValue = new AnswerValue();
answerValue.setVariableInstanceId(paramsVarList.get(i));
answerValue.setAvailableAnswerId(valueCombination.get(i).toString());
questAnswersMap.put(paramsVarList.get(i), answerValue);
}
System.out.println("questAnswersMap (combination): " + questAnswersMap);

List listAnswersIdTMP = questAnswerNextAnswerService.evaluateRestriction(var.getLogicMapData(), var.getRestrictions(), questAnswersMap);
if (listAnswersIdTMP != null) {
listAnswersIdSet.addAll(listAnswersIdTMP);
}
}
System.out.println("listAnswersIdSet: " + listAnswersIdSet);

listAnswersId = new ArrayList(listAnswersIdSet);
System.out.println("listAnswersId (final): " + listAnswersId);

if (!listAnswersId.isEmpty()) {
variableAnswerMap.put(var.getId(), listAnswersId);

SlimPaginatorFilter restQuestFilter = new SlimPaginatorFilter();
FilterUtils.addSlimMatch(restQuestFilter, AvailableAnswer.COLUMNS.ID, SlimMatchOperator.IN, listAnswersId.toArray());
FilterUtils.addSlimOrder(restQuestFilter, AvailableAnswer.COLUMNS.CODE, SlimOrderDirection.ASC);
List restrictionAnswers = availableAnswerService.list(restQuestFilter);
System.out.println("restrictionAnswers (final): " + restrictionAnswers);

List  correctOrderAnswers = new ArrayList();
for (Object answerId : listAnswersId) {
for (AvailableAnswer answer : restrictionAnswers) {
if (answer.getId().equals(answerId)) {
correctOrderAnswers.add(answer);
}
}
}
var.setAvailableAnswers(correctOrderAnswers);
System.out.println("correctOrderAnswers (final): " + correctOrderAnswers);

AnswerValue answerValue = new AnswerValue();
answerValue.setVariableInstanceId(var.getId());
answerValue.setAnswerValue(listAnswersId.get(0).toString());
questAnswersMap.put(var.getId(), answerValue);
System.out.println("questAnswersMap (final): " + questAnswersMap);
}

for (String variableParam : paramsVarList) {
questAnswersMap.remove(variableParam);
}
}
} catch (Exception e) {
//e.printStackTrace();
}
}
}
}
return questionnaire;
}
Я пытался изменить часть оценки или изменить способ цикла внутри своих списков, но ничего не помогло, я всегда получаю только одну комбинацию результатов. ПОЖАЛУЙСТА, ПОМОГИТЕ.

Подробнее здесь: https://stackoverflow.com/questions/790 ... nswer-to-i
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»