Ответ 1
Старомодный способ сделать это с помощью интерфейса:
public interface Normalizer {
int normalize(int value);
}
Затем вы создадите экземпляр Normalizer
, например. с анонимным классом:
public static Normalizer normalizeValFunc(final int min, final int max, final int floor, final int ceiling) {
return new Normalizer() {
@Override public int normalize(int value) {
/* Use min, max, floor, ceiling & value here to return something. */
}
};
}
Затем вы можете написать функцию, которая принимает Normalizer
:
void parsing(int[] data, Normalizer normalizer) {
// Call normalizer.normalize(...)
}
И назовите его следующим образом:
parsing(/* something here */, normalizeValFunc(min, max, floor, ceiling))
В Java 8 вы можете избежать анонимного класса и просто использовать лямбда вместо этого:
public static normalizeValFunc(final int min, final int max, final int floor, final int ceiling) {
return value -> /* Use min, max, floor, ceiling & value here to return something. */
}
Вы также можете сделать это inline:
parsing(/* something here */, value -> /* an expression using min, max, floor, ceiling, value */)
Кроме того, вместо определения Normalizer
вы можете просто использовать стандартный IntUnaryOperator
функциональный интерфейс (и вызовите applyAsInt
вместо of normalize
).