Я чтение пример кода, который должен добавить 10 пикселей, широкий серая рамка, заменяющий пиксели на границе изображения, вызывая его с лямбда-выражения:Путать о лямбда-выражения
public static Image transform(Image in, ColorTransformer t) {
int width = (int) in.getWidth();
int height = (int) in.getHeight();
WritableImage out = new WritableImage(width, height);
for (int x = 0; x < width; x++) {
for (int y = 0; y < height; y++) {
out.getPixelWriter().setColor(x, y,
t.apply(x, y, in.getPixelReader().getColor(x, y)));
}
}
return out;
}
@Override
public void start(Stage stage) throws Exception {
Image image = new Image("test_a.png");
Image newImage = transform(
image,
(x, y, c) -> (x <= 10 || x >= image.getWidth() - 10 ||
y <= 10 || y >= image.getHeight() - 10)
? Color.WHITE : c
);
stage.setScene(new Scene(new VBox(
new ImageView(image),
new ImageView(newImage))));
stage.show();
stage.show();
}
}
@FunctionalInterface
interface ColorTransformer {
Color apply(int x, int y, Color colorAtXY);
}
Я путать о лямбда-выражение:
Image newImage = transform(
image,
(x, y, c) -> (x <= 10 || x >= image.getWidth() - 10 ||
y <= 10 || y >= image.getHeight() - 10)
? Color.WHITE : c
);
чтобы добавить рамку к фигуре, я думаю, «& &» должен быть более разумным, чем «||». Но «& &« здесь не работает! Может ли кто-нибудь объяснить это?
Я действительно не понимаю. «Цвет.WHITE: c». Во-первых, почему они находятся за пределами предыдущего скобки? Во-вторых, что означает знак вопроса (?)?
Благодарим за помощь.
Ваш вопрос/проблема не связана с лямбда, но с логикой [условный оператор] (http://stackoverflow.com/а/17470669/1393766). – Pshemo
Спасибо ~ Я чему-то научился. :-) – SuperDelta