将复杂方法转换为 Lambda 表达式

Convert a complex method into Lambda Expression

我想用新的东西在下面写我的代码。我想使用 Java8 流和函数式编程。

private static void algoritmoSolC(List<Storage> freeSpaces, Double dimPacket, Double nPackets,
            int storageIndex) {
        if (nPackets == 0)
            return;

        List<Storage> list = new ArrayList(freeSpaces) {
            public Object get(int index) {
                if (index < 0) {
                    index = Math.abs(index);
                } else if (index >= size()) {
                    index = index % size();
                }
                return super.get(index);
            }
        };
        for (int i = 0; i < nPackets; i++) {
            Storage storage = list.get(storageIndex);
            if (storage.getFreeSpace() > dimPacket) {
                storage.setFreeSpace(storage.getFreeSpace() - dimPacket);
                ++storageIndex;
            } else {
                ++storageIndex;
                ++nPackets;
            }
        }
    }

我认为如果我在函数式编程中转换代码,我花在结果上的时间会更少。 谁能帮我转换这段代码? 提前致谢

没有真正测试过,但它可以解决这个问题:

IntStream
 .range(storageIndex,Integer.MAX_VALUE)
 .mapToObj(i-> freeSpaces.get(Math.abs(i) % freeSpaces.size()))
 .filter(storage -> storage.getFreeSpace() > dimPacket)
 .limit(nPackets)
 .forEach(storage.setFreeSpace(storage.getFreeSpace() - dimPacket))

看看这个,它真的比你的代码更优雅 :-)