반응형
스트림의 종류
자바8에 추가된 java.util.stream 패키지를 살펴보자
https://www.developer.com/java/data/stream-operations-supported-by-the-java-streams-api.html
모든 스트림에서 사용할 수 있는 공통 메소드들은 BaseStream
에 정의되어 있으며,Stream
은 객체 요소를 처리하는 스트림, IntStream
, LongStream
, DoubleStream
은 각각 기본 타입인 int, long, double 요소를 처리하는 스트림이다.
1. 컬렉션으로부터 스트림 얻기
List<String> list = Arrays.asList("가", "나", "다");
Stream<String> stream = list.stream(); // Collection . stream()
2. 배열로부터 스트림 얻기
String[] strArray = {"가", "나", "다"};
Stream<String> stream = Arrays.stream(strArray); // 문자열
int[] intArray = {1, 2, 3, 4};
IntStream intStream = Arrays.stream(intArray); // 정수
3. 숫자 범위로부터 스트림 얻기
IntStream stream = IntStream.rangeClosed(1, 100);
1부터 100까지 갖는 IntStream을 리턴한다.rangeClosed(int startInclusive, int endExclusive)
=> 첫 번째 매개값부터, 두 번째 매개값까지 순차적으로 제공하는 IntStream 리턴range(int startInclusive, int endInclusive)
=> rangeClosed와 같지만 두 번째 매개값은 포함하지 않는다.
4. 파일로부터 스트림 얻기
Files의 메소드인 lines()
, BufferedReader의 메소드인 lines()
를 이용하여 문자 파일의 내용을 스트림을 통해 읽는다.
public static void main(String[] args) throws IOException{
// 파일 내용을 소스로 하는 스트림
Path path = Paths.get("src/stream/list.txt");
// Files.lines() 메소드 이용
Stream<String> stream = Files.lines(path, Charset.defaultCharset()); // 운영체제 기본 문자셋
stream.forEach(System.out :: println);
System.out.println();
// BufferedReader의 lines() 메소드 이용
File file = path.toFile();
FileReader fileReader = new FileReader(file);
BufferedReader br = new BufferedReader(fileReader);
stream = br.lines();
stream.forEach(System.out :: println);
}
위의 소스를 실행하면 list.txt안의 데이터가 두 번 console에 찍히게 됨
5. 디렉토리로부터 스트림 얻기
Files의 메소드인 list()
를 이용하여 디렉토리의 내용을 스트림을 통해 읽는다.
public static void main(String[] args) throws IOException{
Path path = Paths.get("c://");
Stream<Path> stream = Files.list(path);
stream.forEach(p -> System.out.println(p.getFileName()));
}
[출처 : 이것이 자바다]
반응형
'프로그래밍 노트 > JAVA' 카테고리의 다른 글
[JAVA] Stream의 필터링(distinct(), filter()) (0) | 2019.06.17 |
---|---|
[JAVA] Stream pipeline(스트림 파이프라인) (0) | 2019.06.17 |
[JAVA] Stream API 소개 (0) | 2019.06.17 |
[JAVA] String 객체와 리터럴 (메모리관련) (2) | 2019.04.23 |
[JAVA] 익명객체_익명 구현 객체 생성 (0) | 2019.04.15 |