List<Integer> list = Array.asList(1, 2, 3, 4, 5);
//스트림으로 변환하는 방법
Stream<Integer> inStream = list.stream(); //컬렉션
Stream<String> strStream = Stream.of(new String[] {"a", "b", "c"}); //배열
Stream<Integer> evenStream = Stream.iterate(0, n->n+2); //0,2,4,6,...
Stream<Double> randomStream = Stream.generate(Math::random); //람다식
IntStream intStream = new Random().this(5); //난수 스트림(크기가 5)
- 스트림으로 작업하는 방법(순서)
- 스트림 만들기
- 중간연산
- 최종연산
- 중간연산 : 연산 결과가 스트림인 연산. 반복적으로 적용 가능
- 최종연산 : 연산결과가 스트림이 아닌 연산. 단 한번만 적용 가능(스트림의 요소를 소모)
stream.distinct().limit(5).sorted().forEach(System.out::println)
String[] strArr = {"dd", "aaa", "CC", "cc", "b"};
Stream<String> stream = Stream.of(strArr); //문자열 배열이 소스인 스트림
Stream<String> filteredStream = stream.filter(); //걸러내기 (중간연산)
Stream<String> distinctedStream = stream.distinct(); //중복제거 (중간연산)
Stream<String> sortedStream = stream.sort(); //정렬 (중간연산)
Stream<String> limitedStream = stream.limit(5); //스트림 자르기 (중간 연산)
int total = stream.count(); //요소 개수 세기 (최종 연산)
List<Integer> list = Arrays.asList(3,1,5,4,2);
List<Integer> sortedList = list.stream().sorted()
.collect(Collectors.toList());
//list를 정렬해서 새로운 List에 저장
System.out.println(list); //[3, 1, 5, 4, 2]
System.out.println(sortedList); //[1, 2, 3, 4, 5]
strStream.forEach(System.out::println); //모든 요소를 화면에 출력(최종연산)
int numOfStr = strStream.count(); //에러. 스트림이 이미 닫혔음.
IntStream intStream = new Random().ints(1,46); //1~45범위의 무한 스트림
intStream.distinct().limit(6).sorted() //중간 연산
.forEach(i -> System.out.println(i+","); //최종연산
for(String str : strList) System.out.println(str);
// 위 코드를 아래로 변경
Stream.forEach(System.out::println);
Stream<String> strStream = Stream.of("dd", "aaa", "CC", "cc", "b");
int sum = strStream.parallel() //병렬 스트림으로 전환(속성만 변경)
.mapToInt(s -> s.length()).sum();//모든 문자열의 길이 합
1. 오토박싱 & 언박싱의 비효율이 제거됨(Stream<Integer>대신 intStream사용)
2. 숫자와 관련된 유용한 메서드를 Stream<T>보다 더 많이 제공