티스토리 뷰
반응형
스트림 만들기
배열, 컬렉션, 임의의 수 등 다양한 소스를 이용해 스트림을 만들 수 있음.
1. 컬렉션(Collection)
Collection에 stream()이 정의되어 있는데 그의 자손인 List와 Set을 구현한 컬렉션 클래스는 모두 스트림을 생성 가능
Stream<T> Collection.stream()
2. List 스트림 생성 예시 - list.stream()
public class StreamList{
public static void main(String[] args) {
List<Integer> list = Arrays.asList(1,2,3,4,5);
Stream<Integer> intStream = list.stream();
intStream.forEach(System.out::println);
}
}
3. Array 스트림 생성 예시 - Stream.of(), Arrays.stream()
// 스트림 생서 메서드
Stream<T> Stream.of(T... values) // 가변 인자
Stream<T> Stream.of(T[])
Stream<T> Arrays.stream(T[])
Stream<T> Arrays.stream(T[] array, int staticInclusive, int endExclusive)
// 문자열 스트림 예시
Stream<String> strStream = Stream.of("a", "b", "c"); // 가변인자
Stream<String> strStream = Stream.of(new String[]{"a", "b", "c"})
Stream<String> strStream = Arrays.stream(new String[]{"a", "b", "c"})
Stream<String> strStream = Arrays.stream(new String[]{"a", "b", "c"}, 0, 3);
// 기본형 배열 스트림 예시
IntStream IntStream.of(int... values)
IntStream Instream.of(int[])
IntStream Arrays.stream(int[])
IntStream Arrays.stream(int[] array, int staticInclusive, int edExclusive)
4. 특정 범위의 정수 - range(), rangeClosed()
지정된 범위으 연속된 정수를 스트림으로 생성 후 반환하는 메서드
IntStream IntStream.range(int begin, int end)
IntStream IntStream.rangeClosed(int begin, int end)
// 예시 코드
IntStream intStream = IntStream.range(1,5); // 1,2,3,4
IntStream intStream = IntStream.rangeClosed(1, 5); // 1,2,3,4,5
5. 임의의 수 - ints(), longs(), doubles()
1) Random class(난수 생성)에 아래와 같이 인스턴스 메서드가 포함되어 있음 -> ints(), longs(), doubles()
해당 메서드들은 무한 스트림(infinite stream)으로 limit() 메서드를 같이 사용해야함!!
IntStream ints()
LongStream longs()
DoubleStream doubles()
// 사용 예시
IntStream intStream = new Random().ints(); // 무한 스트림
intStream.limit(5).forEach(System.out::println); // 5개 요소만 출력
2) 다음 메서드들은 유한스트림을 생성 -> ints(long size), longs(long size), doubles(long size)
IntStream ints(long streamSize)
LongStream longs(long streamSize)
DoubleStream doubles(long streamSize)
// 사용 예시
IntStream intStream = new Random().ints(5); // 크기가 5인 난수 스트림 생성
3) 지정된 범위의 난수 발생 스트림 생성
IntStream ints(int begin, int end)
IntStream longs(long begin, long end)
IntStream doubles(double begin, double end)
IntStream ints(long streamSize, int begin, int end)
IntStream longs(long streamSize, long begin, long end)
IntStream doubles(long streamSize, double begin, double end)
6. 람다식 - iterate(), generate()
static <T> Stream<T> iterate(T seed, UnaryOperator<T> f)
static <T> Stream<T> generate(Supplier<T> s)
1) iterate() 는 seed 로 지정된 값부터 람다식 f 에 의해 계산된 결과를 다시 seed값으로 해서 계산을 반복
Stream<Integer> evenStream = Stream.iterate(0, n->n+2);
// 0, 2, 4, 6, ...
2) generate()는 iterate() 처럼 람다식에 의해 계산된 값을 무한 스트림을 생성하지만, 이전 결과를 이용해서 다음 요소로 사용하지 않음
Stream<Double> randomStream = Stream.generate(Math::random);
Stream<Integer> oneStream = Stream.generate( ()->1 );
▶ generate()에 정의된 매개변수 타입은 Supplier<T>로 매개변수 없는 람다만 허용
▶ iterate()와 generate()에 생성된 스트림은 기본형 스트림 타입으로 반환 불가, 필요 시 mapToInt()와 같은 메서드를 사용해 변환
IntStream evenStream = Stream.iterate( 0, n->n+2 ); // 에러
DoubleStream randomStream = Stream.generate( Math::random ); // 에러
IntStream evenStream = Stream.iterate( 0, n->n+2 ).mapToInt(Integer::valueOf);
Stream<Integer> stream = evenStream.boxed(); // IntStream -> Stream<Integer>
7. 파일 - Files.lines()
java.nio.file.Files는 파일을 다루는데 필요한 메서드를 제공.
list()는 지정된 디렉토리(Directory)에 있는 파일 목록을 이용해 스트림으로 생성
Stream<Path> Files.list(Path dir)
// 파일의 한행을 요소로 하는 스트림 셍성 메서드 예시
Stream<String> Files.lines(Path path)
Stream<String> Files.lines(Path path, Charset cs)
Stream<String> lines() // BufferedReader 클래스 메서드
8. 빈 스트림 - empty()
요소가 없는 스트림을 생성할 수 있는데 스트림 연산 결과가 하나도 없을 때, null 보단 빈 스트림 반환이 더 나음!!
Stream emptyStream = Stream.empty(); // 빈 스트림 생성
long count= emptyStream.count() ; // count = 0
9. 두 스트림 연결 - concat()
public class StreamStudy {
public static void main(String[] args) {
String[] str1 = {"123", "456", "789"};
String[] str2 = {"ABC", "abc", "DEF"};
Stream<String> strs1 = Stream.of(str1);
Stream<String> strs2 = Stream.of(str2);
Stream<String> strs3 = Stream.concat(strs1, strs2); // 두 스트림을 하나로 연결
strs3.forEach(System.out::println); // 출력
}
}
// 출력 결과
// 123
// 456
// 789
// ABC
// abc
// DEF
반응형
'Java' 카테고리의 다른 글
[Stream API] 스트림 중간연산 (2/3) (0) | 2023.11.18 |
---|---|
[Stream API] 스트림 중간연산 (1/3) (0) | 2023.11.06 |
[Stream API] 스트림이란? (0) | 2023.10.28 |
[Generices] 지네릭스 (0) | 2023.10.24 |
[Java] 자바 언어의 특징 (0) | 2023.07.24 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- BFS
- 취리코
- JWT
- 글또
- 코드트리
- 백준
- 회고록
- Java
- 객체정렬
- 취업리부트코스
- 전자정부프레임워크
- thymeleaf
- dxdy
- Spring
- Comparator
- NLU
- BufferedReader
- 재기동
- 개발자취준
- 코딩테스트
- BufferedWriter
- 챗봇
- springboot
- 항해99
- Comparable
- RASA
- 유데미
- script
- 자바
- 나만의챗봇
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함
반응형