배열, 컬렉션의 요소를 하나씩 참조해서 람다식으로 처리할 수 있도록 해주는 반복자
특징
선언형 프로그래밍
람다식으로 요소 처리 코드 제공
내부 반복자를 사용 ➡️ 병렬 처리 쉬움
for
, while(iterator)
➡️ 개발자가 직접 코딩중간 연산과 최종 연산
// List
List<String> list = Arrays.asList("a", "b", "c");
Stream<String> listStream = list.stream();
// 배열
String[] arr = {"a", "b", "c"};
Stream<String> stream = Arrays.stream(arr);
Stream<String> stream = Stream.of("a", "b", "c");
// range 지정
IntStream stream = IntStream.range(1, 10);
❗️주의
filter()
distinct()
: 필터링, 중복 제거map()
: 매핑map()
과 flatmap()
sorted()
: 정렬peek()
: 결과 미리보기❗️주의
forEach()
: 요소를 하나씩 연산
match()
: 특정 조건을 충족하는지 검사
sum(), count(), average(), max(), min()
: 기본 연산
reduce()
: 누적 연산
collect()
: 요소들을 List, Set, Map 등 다른 컬렉션으로 수집하고 싶은 경우 사용
❗️주의
❗️byte 기반 스트림
import java.io.FileInputStream;
public class FileInputStreamExample {
public static void main(String args[])
{
try {
// 이름이 codestates.txt인 파일의 파일인풋스트림을 생성
FileInputStream fileInput = new FileInputStream("fileStream.txt");
int i = 0;
//fileInput.read() = -1이면 파일의 마지막
while ((i = fileInput.read()) != -1) {
System.out.print((char)i);
}
fileInput.close();
}
catch (Exception e) {
System.out.println(e);
}
}
}
import java.io.FileOutputStream;
public class FileOutputStreamExample {
public static void main(String args[]) {
try {
// 이름이 codestates.txt인 파일의 파일아웃스트림을 생성
FileOutputStream fileOutput = new FileOutputStream("fileStream.txt");
String word = "hello";
// 바이트 단위
byte b[] = word.getBytes();
// 파일에 작성
fileOutput.write(b);
fileOutput.close();
}
catch (Exception e) {
System.out.println(e);
}
}
}
FileInputStream / FileOutputStream는 byte 기반 스트림이기 때문에 자바의 문자 처리에 적합하지 않음(java char: 2byte). 이를 해결하기 위해 문자 기반 스트림 제공.
public class FileReaderExample {
public static void main(String args[]) {
try {
// 파일명 codestates.txt
String fileName = "file.txt";
FileReader file = new FileReader(fileName);
int data = 0;
// 파일의 마지막까지 읽음
while((data=file.read()) != -1) {
System.out.print((char)data);
}
file.close();
}
catch (IOException e) {
e.printStackTrace();
}
}
}
BufferedReader로 성능 개선
public class BufferedReaderExample {
public static void main(String args[]) {
try {
// 파일명 codestates.txt
String fileName = "File.txt";
FileReader file = new FileReader(fileName);
BufferedReader buffered = new BufferedReader(file);
int data = 0;
// 파일의 마지막까지 읽음
while((data=buffered.read()) != -1) {
System.out.print((char)data);
}
file.close();
}
catch (IOException e) {
e.printStackTrace();
}
}
}
public class FileWriterExample {
public static void main(String args[]) {
try {
// 파일명 codestates.txt
String fileName = "File.txt";
FileWriter writer = new FileWriter(fileName);
// 파일에 새로 작성할 문자열
String str = "written!";
writer.write(str);
writer.close();
}
catch (IOException e) {
e.printStackTrace();
}
}
}
파일과 디렉토리에 접근
// 생성할 파일의 디렉토리와 이름
File file = new File("./", "newFile.txt");
// 파일 생성
file.createNewFile();