gpt4 book ai didi

java - 转换 Java 8 流中的代码

转载 作者:行者123 更新时间:2023-12-02 11:53:51 26 4
gpt4 key购买 nike

有没有简单的方法可以使用流和 forEach 将此代码转换为 java 8。

List<List<IStitchable>> listOfEnvelopes = new ArrayList<>();
List<IStitchable> statementsInEnvelope = new ArrayList<>();
int totalPages = 0;

for(byte[] byteArray :byteArrays){
totalPages = totalPages + getPagesInDocument(byteArray);

if(totalPages/2>MAX_SHEETS_FOR_OVERSIZE_ENVELOPE){
totalPages = 0;
listOfEnvelopes.add(statementsInEnvelope);
tatementsInEnvelope = new ArrayList<IStitchable>();
}

statementsInEnvelope.add(createStitchableFromSnapshot(byteArray));
}

我尝试做类似的事情

byteArrays.stream().forEach(byteArray->{
totalPages = totalPages + getPagesInDocument(byteArray);
if(totalPages/2>MAX_SHEETS_FOR_OVERSIZE_ENVELOPE){
totalPages = 0;
listOfEnvelopes.add(statementsInEnvelope);
statementsInEnvelope = new ArrayList<IStitchable>();
}
statementsInEnvelope.add(createStitchableFromSnapshot(byteArray));
});

但是我无法在 ForEach 中使用 totalPagesstatementsInEnvelope,无法从 forEach 范围访问它们
最后有没有更干净的方法来重构这个东西。任何想法将不胜感激。

最佳答案

最简单的解决方案是使用AtomicInteger:

List<List<IStitchable>> listOfEnvelopes = new ArrayList<>();     
List<IStitchable> statementsInEnvelope = new ArrayList<>();
AtomicInteger totalPages = new AtomicInteger();

byteArrays.stream().forEach(byteArray -> {
totalPages.addAndGet(getPagesInDocument(byteArray));

if(totalPages.get() / 2 > MAX_SHEETS_FOR_OVERSIZE_ENVELOPE){
totalPages.set(0);
listOfEnvelopes.add(new ArrayList<>(statementsInEnvelope));
statementsInEnvelope.clear();
}
statementsInEnvelope.add(createStitchableFromSnapshot(byteArray));
});

关于java - 转换 Java 8 流中的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47717669/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com