将复杂方法转换为 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))
看看这个,它真的比你的代码更优雅 :-)
我想用新的东西在下面写我的代码。我想使用 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))
看看这个,它真的比你的代码更优雅 :-)