我正在讀的示例代碼是通過用λ表達式調用它增加一個10像素寬的灰色幀替換上的圖像的邊界處的像素:困惑lambda表達式
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);
}
我困惑的lambda表達式:
Image newImage = transform(
image,
(x, y, c) -> (x <= 10 || x >= image.getWidth() - 10 ||
y <= 10 || y >= image.getHeight() - 10)
? Color.WHITE : c
);
要將框架添加到的人物,我覺得「& &」應該比「||」更加合理。但是,「& &」在這裏不起作用!任何人都可以解釋一下嗎?
我不太明白「?Color.WHITE:c」。首先,他們爲什麼不在以前的支架?其次,問號(?)是什麼意思?
感謝您提前給予的幫助。
你的問題/問題不在於拉姆達但與邏輯[條件運算符(http://stackoverflow.com /一個/1393766分之17470669)。 – Pshemo
謝謝〜我學到了一些東西。 :-) – SuperDelta