-1
Java SE 8의 다양한 측면을보고 있습니다. 컴파일 할 수있는 코드가 런타임 예외 또는 겉보기로 이어지는 여러 상황이 있습니다. 불일치. 한 구문에서 구문이 예상대로 작동하지만 다른 구문에서는 실패한 것처럼 보입니다. 벌레인가, 아니면 뭔가 빠졌는가? 0에서 시작Java SE 8 IntStream.reduce (등)가 일관성없이 작동하는 것 같습니다.
import java.util.stream.IntStream;
import java.util.stream.LongStream;
import java.util.stream.DoubleStream;
import static java.lang.System.*;
public class Stream06 {
public static void main(String[] args) {
out.println(IntStream.rangeClosed(2,5)
.reduce((i,j)->i+j).getAsInt()); // OK
out.println(IntStream.rangeClosed(2,5)
.reduce(0,(i,j)->i+j)); // OK
out.println(IntStream.rangeClosed(2,5)
.reduce((i,j)->i*j).getAsInt()); // OK!
out.println(IntStream.rangeClosed(2,5)
.reduce(0,(i,j)->i*j)); // zero!!!
out.println();
out.println(LongStream.rangeClosed(2,5)
.reduce((l,m)->l+m).getAsLong()); // OK
out.println(LongStream.rangeClosed(2,5)
.reduce(0,(l,m)->l+m)); // OK
out.println(LongStream.rangeClosed(2,5)
.reduce((l,m)->l*m).getAsLong()); // OK!
out.println(LongStream.rangeClosed(2,5)
.reduce(0,(l,m)->l*m)); // zero!!!
out.println();
out.println(DoubleStream.of(2.5, 1.3, 6.8)
.reduce((d,e)->d+e).getAsDouble()); // OK
out.println(DoubleStream.of(2.5, 1.3, 6.8)
.reduce(0,(d,e)->d+e)); // OK
out.println(DoubleStream.of(2.5, 1.3, 6.8)
.reduce((d,e)->d*e).getAsDouble()); // OK (usual rounding issue)
out.println(DoubleStream.of(2.5, 1.3, 6.8)
.reduce(0,(d,e)->d*e)); // zero!!!
}
}
:-) 예상됩니다 /8/docs/api/java/util/stream/IntStream.html#reduce-int-java.util.function.IntBinaryOperator-) : * 'identity'값은 누산기 함수의 ID 여야합니다. * 읽고 읽었습니까? 그 문장을 이해하니? 곱셈의 아이덴티티는 '0'이 아니라 '1'입니다. – Holger
@ user3627702 어떤 런타임 예외가 발생 했습니까? 제로 결과를 얻는 것에 관해서, 다른 사람들은 곱셈에 대한 감축의 "동일성"값으로 0을 사용한다면 그것이 예상됨을 지적했습니다. 이것을 이해하지 못한다면 어쩌면 그 용어로 질문을 재 작성해야합니다. 나는 이것이 관련 주제에 관한 질문이라고 생각합니다. –
런타임 예외는 하나 이상의 컨텍스트 (예 : ZonedDateTime.from (anInstant))에서 .from (TemporalAccessor)를 사용하여 설명서를 읽는 중 효과가 있음을 나타냅니다. – user3627702