Проверьте каждый вопрос индивидуально и используйте набор битов для кодирования комбинаций ответов.
Это приводит к более чистому коду, потому что вы тестируете каждый критерий только один раз, он компактен, но удобен для чтения, и все же вы можете легко подключить код для обработки каждой комбинации.И это тоже быстро.O (n), чтобы проверить все критерии, и O (1), чтобы найти фактическую комбинацию.
Для небольшого фиксированного числа критериев вы можете перемещать биты вручную.Для многих критериев или для решения, которое масштабируется, используйте java.util.BitSet
Пример проталкивания битов:
int bits = 0;
if (...criteria 1...) {
bits = 1;
}
if (...criteria 2...) {
bits |= 2;
}
if (...bits 3...) {
bits |= 4;
}
switch (bits) {
case 0: // no criteria matched
;
case 1: // criteria 1 matched
;
case 2: // criteria 2 matched
;
case 3: // criteria 1 AND 2 matched
;
case 4: // criteria 3 matched
;
case 5: // criteria 1 AND 3 matched
;
case 6: // criteria 2 AND 3 matched
;
case 7: // criteria 1 AND 2 AND 3 matched
;
}
Вы можете обобщить это решение, используя java.util.BitSet для обработки битдля n критериев (полезно, когда n> 64!).Для облегчения быстрого поиска сохраните хэш каждой комбинации BitSet в карте, которая отображает хэш-код в класс команд.