我正在阅读一个示例代码,它将添加一个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
);
>
要为图形添加框架,我认为"
“我真的不明白?颜色。白:c”。第一,为什么它们在前一个括号之外?其次,问号(?)意思是?
提前感谢您的帮助。
你的程序相当于这样:(如果你不使用lambda)
public static Image transform(Image in) {
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++) {
Color c = in.getPixelReader().getColor(x, y);
if (x <= 10 || x >= image.getWidth() - 10 ||
y <= 10 || y >= image.getHeight() - 10)
c = Color.WHITE;
/* else
c = c; */
out.getPixelWriter().setColor(x, y, c);
}
}
return out;
}
首先,您的问题与 lambda
无关,而是一般的表达式。
从第二部分开始:A ?
B :
C表示“如果认为A为真,则我的值为B,否则为C。表达式中的一种< code>if语句。
至于第一部分:如果任何一个单独的测试都是真的(每个测试的形式都是点太左/右/上/下),那么该点(大概)在外面,并且是白色的;否则,请使用颜色 C
。你不能让它们同时都为真:例如,一个点不能太左太右太右。
问题内容: 我对正则表达式中的反斜杠感到困惑。在正则表达式中,a具有特殊含义,例如表示十进制数字。如果在反斜杠前面添加反斜杠,则该特殊含义会丢失。在正则表达式中,可以阅读: 也许最重要的元字符是反斜杠。与Python字符串文字一样,反斜杠后可以跟各种字符,以表示各种特殊序列。它也用于转义所有元字符,因此您仍可以按模式匹配它们。例如,如果您需要匹配或,则可以在它们前面加上反斜杠以删除其特殊含义:或。
我正在尝试提出一种解决方案,它涉及在连接操作之后应用一些逻辑,从多个中的中选择一个事件。这类似于reduce函数,但它只返回1个元素,而不是递增地返回。因此最终结果将是单个(,对,而不是一个 每个键保证只到达一次。 假设像上面这样的连接操作,它用4个生成了1个,成功地连接并收集在。现在,我想做的是,立即访问这些值,并执行一些逻辑以将正确匹配到一个。例如,对于上面的数据集,我需要(,和)。 将为每个
所以我一直在读Kafka的语义学,我对它的工作原理有点困惑。 我理解生产者如何避免发送重复的消息(以防代理的ack失败),但我不明白的是,在消费者处理消息但在提交偏移量之前崩溃的情况下,一次是如何工作的。Kafka不会在这种情况下重试吗?
问题内容: 我已经在eclipse中创建了一个项目,并添加了Maven依赖项。在Eclipse中,它表示我正在使用JRE 1.5。一切在Eclipse中都可以正常运行,例如,我可以运行测试。 当我尝试从终端运行时,出现以下错误。 …在-source 1.3中不支持泛型(使用-source 5或更高版本来启用泛型)… 看来,Maven认为我正在使用JRE 1.3,并且无法识别泛型或for-each循
问题内容: 在碰到此链接http://www.javacodegeeks.com/2013/01/java-thread-pool-example-using- executors-and-threadpoolexecutor 之后,这是我第一次为新项目使用Java线程池。 .html ,我对此更加困惑,这是页面中的代码, 在代码中,创建了一个固定大小的池并创建了10个工作线程,对吗? 线程池应该
所以,是的,我保留了访客模式的主要思想,而不是来回的疯狂。这样可以吗?