Это мой подход к таким утверждениям, давайте предположим, что result
является объектом и имеет два примитивных логических элемента (имейте в виду, что в «большом» логическом значении может быть ноль) first
и last
( с методами получения )
public class Result {
private boolean first;
private boolean last;
//getters, constructor etc
}
Давайте обернем условия в Predicate
и поместим их в карту, где ключ - это предикат, а значение - ожидаемое значение:
private final static Predicate<Result> = RESULT_1-> result.getFirst() && result.getLast();
private final static Predicate<Result> = RESULT_2 -> !result.getFirst() && result.getLast();
private final static Predicate<Result> = RESULT_3 -> result.getFirst() && !result.getLast();
private final static DEFAULT_VALUE = "none present";
private final static Map<Predicate<Result>, String> RESULT_MAP = Map.of(
RESULT_1, "both present",
RESULT_2, "last present",
RESULT_3, "first presnt");
Затем вы можете использовать его следующим образом:
String output = map.entrySet().stream().filter(predicate -> predicate.getKey().test(resultToTest))
.findFirst()
.map(Entry::getValue).orElse(DEFAULT_VALUE);
Конечно, дайте этим переменным осмысленные имена, сделайте некоторую экстракцию и т. Д. В этом подходе, когда вам нужно добавить новое условие в код, вы просто добавляетеновый предикат на карту, и все.В случае, если вы маленький, вам не нужно писать гибкий код, как я показал, но в более сложных вопросах этот подход приемлем.