如何解决Java8 方法链
我正在尝试学习 lambda 表达式,但是,我无法理解此示例代码中发生了什么。
作者试图解释方法链,
import java.util.stream.Stream;
import java.util.function.Function;
import java.awt.Color;
import java.util.function.Consumer;
class Camera {
private Function<Color,Color> filter;
public Color capture(final Color inputColor) {
final Color processedColor = filter.apply(inputColor);
// ... more processing of color...
return processedColor;
}
// ... other functions that use the filter ...
public void setFilters(final Function<Color,Color>... filters) {
filter = Stream.of(filters).reduce((filter,next) -> filter.compose(next)).orElse(color -> color);
}
public Camera() {
setFilters();
}
public static void main(final String[] args) {
final Camera camera = new Camera();
final Consumer<String> printCaptured = (filterInfo) -> System.out
.println(String.format("with %s: %s",filterInfo,camera.capture(new Color(200,100,200))));
System.out.println("//" + "START:NOFILTER_OUTPUT");
printCaptured.accept("no filter");
System.out.println("//" + "END:NOFILTER_OUTPUT");
System.out.println("//" + "START:BRIGHT_OUTPUT");
camera.setFilters(Color::brighter);
printCaptured.accept("brighter filter");
System.out.println("//" + "END:BRIGHT_OUTPUT");
System.out.println("//" + "START:DARK_OUTPUT");
camera.setFilters(Color::darker);
printCaptured.accept("darker filter");
System.out.println("//" + "END:DARK_OUTPUT");
System.out.println("//" + "START:BOTH_OUTPUT");
camera.setFilters(Color::brighter,Color::darker);
printCaptured.accept("brighter & darker filter");
System.out.println("//" + "END:BOTH_OUTPUT");
}
}
现在让我们考虑这一行: camera.setFilters(Color::brighter);
这里我们得到一个 RGB 值,它被传递给 setFilters 方法,并为该颜色创建一个流对象。对于要处理的函数,应该为该函数定义一个应用方法,我不知道发生了什么。谁能解释一下。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。