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

时间:2016-12-16 12:40:24

标签: java arraylist lambda java-8 circular-list

我想用下面的代码写下我的代码。我想使用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;
            }
        }
    }

我认为如果我在函数式编程中转换代码,我花在结果上的时间就会减少。 任何人都可以帮我转换这段代码吗? 提前致谢

1 个答案:

答案 0 :(得分:2)

Didnt真的测试了它,但它可以解决这个问题:

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))

看着它,你的代码真的出乎意料地更加优雅: - )