在了解了java 8中的lambdas之后,我一直试图从功能上进行思考。
例如,在这个算法中,我循环遍历一个数组,以查看数组中的哪个图形设备与当前使用的图形设备匹配。它将非匹配元素的值设置为false,将匹配元素的值设置为true。
我该如何从功能上表达呢或者,有些事情是不是更能按程序表达我提出的方法1)不起作用,因为foreach返回void,即使它确实起作用,但与我的“过程版本”算法中使用的增强for循环相比,它感觉不自然。

public void findCurrentMonitor() {

    GraphicsDevice current = frame.getGraphicsConfiguration().getDevice();

    // Procedural version
    for (Monitor m : monitors)
        if (m.getDevice() == current) m.setCurrent(true);
        else m.setCurrent(false);

    // Functional version
    monitors.stream()
    //  .forEach(a -> a.setCurrent(false)) # Impossible. Returns void.
        .filter (a -> a.getDevice() == current)
        .forEach(a -> a.setCurrent(true));
}

最佳答案

从纯函数式编程的角度来看,Monitor应该是不可变的。你可以这样做:

Stream<Monitor> stream = monitors.stream().map(x -> new Monitor(m.getDevice(), m.getDevice()==current));

如果你希望变异相同的基因,为什么不:
monitors.stream().forEach(a -> a.setCurrent(a.getDevice() == current));

07-24 09:25