https://youtu.be/AOw4cCVUJC4?list=PLW2UjW795-f6xWA2_MUhEVgPauhGl3xIp
📖본 포스팅은 '자바의 정석 - 남궁성 저자' 님의 책과 유튜브 강의를 보고 작성되었습니다.
[스트림 만들기 - 컬렉션]
컬렉션으로부터 스트림을 만드는 방법을 알아보자.
- Collection인터페이스의 stream()으로 컬렉션을 스트림으로 변환
package javajungsuk;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Stream;
public class Java14_7 {
public static void main(String[] args) {
List<Integer> list = Arrays.asList(1,2,3,4,5);
Stream<Integer> intStream = list.stream(); //list를 Stream으로 변환
intStream.forEach(System.out::print); //forEach는 최종연산으로 스트림이 닫혀서 아래와 같이 해줘야 한다.
intStream = list.stream(); //list로부터 stream 생성
intStream.forEach(System.out::print);
}
}
[스트림 만들기 - 배열]
- 객체 배열로부터 스트림 생성하기
[문자형 배열인 경우]
package javajungsuk;
import java.util.stream.Stream;
public class Java14_8 {
public static void main(String[] args) {
Stream<String> strStream = Stream.of(new String[] {"a","b","c","d"});
strStream.forEach(System.out::println);
}
}
package javajungsuk;
import java.util.stream.Stream;
public class Java14_8 {
public static void main(String[] args) {
String[] strArr = {"a","b","c","d"};
Stream<String> strStream = Stream.of(strArr);
strStream.forEach(System.out::println);
}
}
package javajungsuk;
import java.util.Arrays;
import java.util.stream.Stream;
public class Java14_8 {
public static void main(String[] args) {
String[] strArr = {"a","b","c","d"};
Stream<String> strStream = Arrays.stream(strArr);
strStream.forEach(System.out::println);
}
}
[int형 배열일 경우]
package javajungsuk;
import java.util.Arrays;
import java.util.stream.Stream;
public class Java14_8 {
public static void main(String[] args) {
Integer[] intArr = {1,2,3,4,5};
Stream<Integer> intStream = Arrays.stream(intArr);
intStream.forEach(System.out::println);
}
}
package javajungsuk;
import java.util.Arrays;
import java.util.stream.IntStream;
import java.util.stream.Stream;
public class Java14_8 {
public static void main(String[] args) {
int[] intArr = {1,2,3,4,5};
IntStream intStream = Arrays.stream(intArr);
intStream.forEach(System.out::println);
}
}
[기본 스트림이 추가로 제공하는 것]
package javajungsuk;
import java.util.Arrays;
import java.util.stream.IntStream;
import java.util.stream.Stream;
public class Java14_8 {
public static void main(String[] args) {
int[] intArr = {1,2,3,4,5};
IntStream intStream = Arrays.stream(intArr);
//intStream.forEach(System.out::println);
//System.out.println("count = "+ intStream.count());
//System.out.println("sum = "+ intStream.sum());
//System.out.println("average = "+ intStream.average());
}
}
- 기본 스트림의 경우 sum과 average를 사용할 수 있는 이유는 int로 숫자라는 것을 알기 때문이다. 그러나 객체형의 경우엔 데이터타입이 무엇을 의미하는지 모르기 때문에 이때는 sum, average같은 메소드는 제공하지 않고 count는 제공한다. (count는 몇개인지 세면 되니까 가능하다.)
[스트림 만들기 - 임의의 수]
- 난수를 요소로 갖는 스트림 생성하기
- 지정된 범위의 난수를 요소로 갖는 스트림을 생성하는 메서드(Random 클래스)
package javajungsuk;
import java.util.Random;
import java.util.stream.IntStream;
public class Java14_9 {
public static void main(String[] args) {
IntStream intStream = new ints();
intStream
.limit(5)
.forEach(System.out::println);
}
}
package javajungsuk;
import java.util.Random;
import java.util.stream.IntStream;
public class Java14_9 {
public static void main(String[] args) {
IntStream intStream = new ints(5);
intStream
.forEach(System.out::println);
}
}
- 특정 범위의 정수를 요소로 갖는 스트림 생성하기(IntStream, LongStream)
[스트림 만들기 - 람다식 iterate(), generate()]
- 람다식을 소스로 하는 스트림 생성하기
- iterate()는 이전 요소를 seed로 해서 다음 요소를 계산한다.
- 이전 요소에 종속적이다.
- generate()는 seed를 사용하지 않는다.
- 이전 요소에 독립적이다.
package javajungsuk;
import java.util.Random;
import java.util.stream.IntStream;
import java.util.stream.Stream;
public class Java14_9 {
public static void main(String[] args) {
//iterate(T seed, UnaryOperator f) 당항 연산자
Stream<Integer> intStream = Stream.iterate(0, n->n+2);
intStream.limit(10).forEach(System.out::println);
//generate : 주기만하는 것 입력X, 출력 O
Stream<Integer> oneStream = Stream.generate(()->1);
oneStream
.limit(10)
.forEach(System.out::println);
}
}
[스트림 만들기 - 파일과 빈 스트림]
- 파일을 소스로 하는 스트림 생성하기
- 지정된 폴더 안에 파일들을 손쉽게 관리할 수 있다.
- 비어있는 스트림 생성할 수도 있다.
- 자주 쓰이지 않아 그냥 있다고만 알면 됨.
'Java > 객체지향' 카테고리의 다른 글
[객체지향][스트림/Stream] - 스트림의 중간연산(1) (0) | 2022.03.18 |
---|---|
[객체지향][스트림/Stream] - 스트림의 연산 (0) | 2022.03.18 |
[객체지향][스트림/Stream] - 스트림, 스트림의 특징 (0) | 2022.03.15 |
[객체지향][람다식/Lambda Expression] - 메서드 참조, 생성자의 메서드 참조 (0) | 2022.03.12 |
[객체지향][람다식/Lambda Expression] - Predicate의 결합. CF와 함수형 인터페이스 (0) | 2022.03.09 |