코드
import java.util.Arrays;
import java.util.Random;
// 저장소를 두고 나보다 큰 값이 존재할 때 마다 갱신해준다.
public class 큰수출력하기 {
static int count1 = 0;
public static void main(String[] args) {
int count2 = 0;
//사용한 스트림은 닫힌다.
int[] array = new Random().ints(100000000, 1, 500000000).toArray();
long start = System.nanoTime();
int maxInt = Arrays.stream(array)//.parallel()
.reduce(Integer.MIN_VALUE, (a, b) -> {
if(a<b) {
System.out.println(a+" "+b);
큰수출력하기.count1++;
return b;
}else {
return a;
}
});
long time1 = System.nanoTime()-start;
System.out.println("스트림 소요시간 : " + time1);
System.out.println("=====================");
start = System.nanoTime();
int tmp = Integer.MIN_VALUE;
for(int i=0;i<array.length;i++) {
if(tmp<array[i]) {
System.out.println(tmp+" "+array[i]);
count2++;
tmp=array[i];
}
}
long time2 = System.nanoTime()-start;
System.out.println("반복문 소요시간 : " + time2);
System.out.println("=====================");
System.out.println("큰 수1 : "+ maxInt);
System.out.println("큰 수2 : "+ tmp);
System.out.println("몇 번 바뀜1? : " + 큰수출력하기.count1);
System.out.println("몇 번 바뀜2? : " + count2);
System.out.println(time1<time2?"스트림 승":"반복문 승");
}
}
결과
-2147483648 476580811
476580811 493765607
493765607 496102572
496102572 498071274
498071274 498579226
498579226 498581580
498581580 499974453
499974453 499982837
499982837 499988721
499988721 499992574
499992574 499997941
499997941 499999160
499999160 499999594
499999594 499999715
499999715 499999907
499999907 499999999
스트림 소요시간 : 183235800
=====================
-2147483648 476580811
476580811 493765607
493765607 496102572
496102572 498071274
498071274 498579226
498579226 498581580
498581580 499974453
499974453 499982837
499982837 499988721
499988721 499992574
499992574 499997941
499997941 499999160
499999160 499999594
499999594 499999715
499999715 499999907
499999907 499999999
반복문 소요시간 : 168843400
=====================
큰 수1 : 499999999
큰 수2 : 499999999
몇 번 바뀜1? : 16
몇 번 바뀜2? : 16
반복문 승
499999779 499999931
499999599 499999629
499999931 499999977
499999814 499999977
499999969 499999977
499999683 499999883
499999961 499999973
499999629 499999916
499999916 499999977
499999983 499999998
스트림 소요시간 : 60819700
=====================
-2147483648 199357576
199357576 398610478
398610478 413062510
413062510 446294614
446294614 464418743
464418743 482929931
482929931 498455214
498455214 499114240
499114240 499685673
499685673 499953566
499953566 499986697
499986697 499989576
499989576 499991638
499991638 499994863
499994863 499995096
499995096 499998840
499998840 499999009
499999009 499999140
499999140 499999772
499999772 499999817
499999817 499999847
499999847 499999983
499999983 499999990
499999990 499999998
반복문 소요시간 : 139373100
=====================
큰 수1 : 499999998
큰 수2 : 499999998
몇 번 바뀜1? : 920
몇 번 바뀜2? : 24
스트림 승
.parallel() 주석을 풀었을 시 결과
스트림과 일반 반복문 차이와 스트림에서 단일과 병렬쓰레드 차이를 보여주고 있다.