public static Branch.Overload checkTemporaryLimits(Branch branch, Branch.Side side, float limitReduction, double i) { Objects.requireNonNull(branch); Objects.requireNonNull(side); CurrentLimits limits = branch.getCurrentLimits(side); if (limits != null && !Double.isNaN(limits.getPermanentLimit()) && !Double.isNaN(i)) { String previousLimitName = null; double previousLimit = limits.getPermanentLimit(); for (CurrentLimits.TemporaryLimit tl : limits.getTemporaryLimits()) { // iterate in ascending order if (i >= previousLimit * limitReduction && i < tl.getValue() * limitReduction) { return new OverloadImpl(tl, previousLimitName, previousLimit); } previousLimitName = tl.getName(); previousLimit = tl.getValue(); } } return null; }