Numeric Stream
- 내부적으로 합계를 계산하기 전에 Integer를 기본형으로 언박싱해야하기 때문에 박싱 비용이 숨어 있다.
- 종류:
IntStream
LongStream
DoubleStream
Ranges
range(start, end)
rangeClosed(start, end)
DoubleStream 에서는 range, rangeClosed 를 사용할 수 없으므로 Instream 으로 range 를 사용 후 asDoubleStream()으로 사용해야 한다.
package com.learn.java.numericstreams;
import java.util.stream.DoubleStream;
import java.util.stream.IntStream;
import java.util.stream.LongStream;
public class NumericStreamRangeExample {
public static void main(String[] args) {
IntStream intStream = IntStream.range(1, 50);
System.out.println("Range Count " + intStream.count());
IntStream.range(1, 50).forEach((value -> System.out.print(value + ", ")));
System.out.println();
System.out.println("Range Closed Count " + IntStream.rangeClosed(1, 50).count());
IntStream.rangeClosed(1, 50).forEach((value -> System.out.print(value + ", ")));
System.out.println("Long Stream Range Closed Count " + LongStream.rangeClosed(1, 50).count());
LongStream.rangeClosed(1, 50).forEach(value -> System.out.print(value + ", "));
System.out.println();
IntStream.range(1, 50).asDoubleStream().forEach(value -> System.out.print(value + ", "));
}
}
Aggregate
- 종류
sum()
max()
min()
average()
package com.learn.java.numericstreams;
import java.util.OptionalDouble;
import java.util.OptionalInt;
import java.util.OptionalLong;
import java.util.stream.IntStream;
import java.util.stream.LongStream;
public class NumericStreamAggregateExample {
public static void main(String[] args) {
int sum = IntStream.rangeClosed(1, 50).sum();
System.out.println("Sum is : " + sum);
OptionalInt optionalInt = IntStream.rangeClosed(1, 50).max();
System.out.println(optionalInt.isPresent() ? optionalInt.getAsInt() : 0);
OptionalLong optionalLong = LongStream.rangeClosed(50, 100).min();
System.out.println(optionalLong.isPresent() ? optionalLong.getAsLong() : 0);
OptionalDouble optionalDouble = IntStream.rangeClosed(1, 50).average();
System.out.println(optionalDouble.isPresent() ? optionalDouble.getAsDouble() : 0);
}
}
Boxing() & UnBoxing()
Boxing()
- 기본형 ➜ Wrapper 클래스
int ➜ Integer
UnBoxing()
- Wrapper 클래스 ➜ 기본형
Integer ➜ int
package com.learn.java.numericstreams;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
public class NumericStreamsBoxingUnboxingExample {
public static List<Integer> boxing() {
return IntStream.rangeClosed(1, 10)
.boxed()
.collect(Collectors.toList());
}
public static int unBoxing(List<Integer> integerList) {
return integerList.stream()
.mapToInt(Integer::intValue)
.sum();
}
public static void main(String[] args) {
System.out.println("Boxing : " + boxing());
List<Integer> integerList = boxing();
System.out.println("Unboxing : " + unBoxing(integerList));
}
}