for문 iterator 대신 코드 간결
배열이랑 컬렉션에만 사용되나? .. 아님
배열이나 컬렉션뿐 아니라, 값 자체, 빌더, 함수형 방식, 파일, 숫자 범위 등 다양한 방식으로
내부 반복자이(forEach와 같이 메소드에서 알아서 == 우리가 써주지 않아도 반복분 처리)므로 처리 속도가 빠르고 병렬 처리에 효율적
외부 반복자? : for, iterator 같이 반복의 주도권이 개발자에게
List<String> list = Arrays.asList("a", "b", "c");
for (String s : list) { // 향상된 for문 (외부 반복)
System.out.println(s);
}
Iterator<String> it = list.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
람다식과 함께 쓰기 때문에 간결

int[] arr = new int[] {1,2,3};
IntStream intStream = Arrays.stream(arr);
//arr없이 바로
IntStream intStream = Arrays.stream(new int[]{1,2,3});
Integer[] arr = new Integer[] {1,2,3};
Stream<Integer> stream = Arrays.stream(arr);
//arr없이 바로
Stream<Integer> stream = Arrays.stream(new iInteger[]{1,2,3};
Integer[] Stream <Integer> Arrays.stream(new Integer[]{...})
int[] IntStream Arrays.stream(new int[]{...})
🚫 제네릭<> 은 기본형이 안되기 때문에 IntStream이라고 따로 맀음
| 기본형 | 스트림 타입 |
|---|---|
| int | IntStream |
| long | LongStream |
| double | DoubleStream |
스트림은 파이프처럼 계속 연결해서 사용 가능하다
== 스트림 파이프라인
🚫파이프라인 맨 끝에는 최종처리 라인이 있어야 한다.
boxed()
mapToInt() : T -> int
forEach()
isPresent() : boolean
ifPresent(메소드 재정의해서 쓰면됨) : void
//null체크를 하지 않아도 되서 편한거다
int[] arr = {1, 2, 3, 4, 5};
// int[] → IntStream → Stream<Integer>
Stream<Integer> stream = Arrays.stream(arr).boxed();
바이트 스트림
최상위 클래스는 InputStream, OutputStream
하위클래스들은 아래처럼
입력 : XxxInputStream
출력 : XxxOutputStream
텍스트 스트림
최상위 클래스는 Reader Writer
입력: XXXReader
출력: XxxWriter
프로그램기준 들어오면 입력 스트림, 나가면 출력 스트림
출력 : write(int b) int는 4바이트지만 끝 1바이트만 출력
write() -> flush() -> close()
입력 : read() : 1바이트를 읽고 int(4byte)로 리턴
read() -> close()
출력 : write(byte[] b)
입력 : read()
바이트 스트림을 문자스트림으로 변환해서 사용하려면 보조 스트림이 필요하다
보조스트림 변수 = new 보조스트림(입출력스트림);
1) InputStream -> Reader
2) OutputStream -> Writer
메모리 버퍼를 제공하여 프로그램의 실행 성능을 향상시키는 보조 스트림
1) 바이트 스트림 : BufferedOuputStream BufferedInputStream
2) 문자 스트림 : BufferedReader BufferedWriter
문자 입력 스트림 Reader에서 성능향상스트림을 사용하면 readLine() 메소드를 사용할 수 있다.