Примечание: в вашем примере вы возвращаете 3 по умолчанию, поэтому если, например, i=2
или j=2
, вы вернете 3
. Это ожидаемое поведение? Я приведу примеры, где предполагается, что значения i
и j
всегда будут 0
или 1
. Для вашего конкретного примера c:
Кажется, это хороший компромисс, он короче и достаточно прост для чтения:
if(counterFlag==0) {
return priorityEnable == 0 ? 0 : 1;
}
return priorityEnable == 0 ? 2 : 3;
Для более сложных случаев (например, 3, 4 или более переменных): Я бы go за что-то вроде этого:
Map<int[], Integer> map = new HashMap<>();
map.put(new int[] {0, 0}, 0);
map.put(new int[] {0, 1}, 1);
map.put(new int[] {1, 0}, 2);
map.put(new int[] {1, 1}, 3);
return map.entrySet().stream()
.filter(e -> e.getKey()[0] == counterFlag)
.filter(e -> e.getKey()[1] == priorityEnable)
.map(Map.Entry::getValue)
.findFirst()
.orElseThrow(IllegalArgumentException::new);
РЕДАКТИРОВАТЬ: @Holger указал, что "Это пустая трата использовать HashMap и затем искать его линейно. Используйте IntBuffer в качестве ключа, и вы можете выполнить прямой поиск с помощью get "
. Это хороший момент, я попробовал его, и я думаю, что он имел в виду:
Map<IntBuffer, Integer> map = new HashMap<>();
map.put(IntBuffer.wrap(new int[] {0, 0}), 0);
map.put(IntBuffer.wrap(new int[] {0, 1}), 1);
map.put(IntBuffer.wrap(new int[] {1, 0}), 2);
map.put(IntBuffer.wrap(new int[] {1, 1}), 3);
IntBuffer intBuffer = IntBuffer.wrap(new int[] {counterFlag, priorityEnable});
return map.get(intBuffer);