【问题标题】:Convert a complex method into Lambda Expression将复杂方法转换为 Lambda 表达式
【发布时间】:2017-05-02 06:22:03
【问题描述】:

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

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

【问题讨论】:

  • 你到底想做什么?请更具体。
  • 我想要一个 lamda 表达式,如果可以的话!

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


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-22
    • 2016-10-11
    • 2013-04-24
    • 1970-01-01
    • 2011-09-22
    • 1970-01-01
    • 2012-01-15
    • 1970-01-01
    相关资源
    最近更新 更多