스트림 및 forEach를 사용하여이 코드를 Java 8로 쉽게 변환 할 수 있습니까?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는 범위
마지막에서 액세스 할 수 없습니다 totalPages
및 foreach는 내 statementsInEnvelope
, 을 사용할 수 없습니다 이거. 어떤 아이디어라도 감사 할 것입니다.
. 가독성에 대한 영향은 논쟁의 여지가 있습니다. 또한, AtomicInteger (추가 할당, 힙에서 여분의 포인터 역 참조, 휘발성 필드 읽기 및 업데이트)를 사용하는 댓가를 치르고 있습니다. – JnRouvignac
여기에서 "쉬운"일은 커스텀 컬렉터를 회전시키는 것입니다. 그것을 쓰려면 여기에 하나의 참조 예 : https://stackoverflow.com/questions/47645399/java-8-stream-defining-collectors-based-on-other-collectors/47649011#47649011 – Eugene