프로그래밍 언어/Java
[Stream] 스트림의 종류(Stream, BaseStream)
코딩하는흑구
2019. 9. 15. 22:26
Stream은 BaseStream이라는 부모 인터페이스가 있고 각각의 자식인터페이스로 다음과 같이 있다.
Stream : 객체요소를 처리하는 스트림
나머지 : 각각의 타입에 맞는 primitive 타입에 대한 요소를 처리
컬렉션으로부터 스트림 얻기
public class FromCollectionExample {
public static void main(String[] args) {
List<Student> studentList = Arrays.asList(
new Student("티타늄",10),
new Student("오리발",5),
new Student("하하하",30),
new Student("케케케",24)
);
Stream<Student> stream = studentList.stream();
stream.forEach(s ->System.out.println(s.getName()));
}
}
/*
티타늄
오리발
하하하
케케케
*/
- 컬렉션 객체에 있는 stream() 메소드를 호출하면 해당 컬렉션 타입에 해당하는 스트림 객체 반환
배열로부터 스트림 얻기
public class FromArrayExample {
public static void main(String[] args) {
String[] strArray = {"홍길동","강마에","하하하"};
//배열로부터 스트림 얻음.
Stream<String> strStream = Arrays.stream(strArray);
strStream.forEach(s -> System.out.print(s+",")); //홍길동,강마에,하하하,
int[] intArray = {1,2,3,4,5};
IntStream intStream = Arrays.stream(intArray);
intStream.forEach(s-> System.out.print(s+","));//1,2,3,4,5,
}
}
- 배열에서는 Arrays 클래스의 stream() 메소드의 매개값으로 배열을 던지면 해당 타입의 스트림이 반환됨.
숫자 범위로부터 스트림 얻기
package Stream.categoryPackage;
import java.util.stream.IntStream;
public class FromIntRangeExample {
public static int sum;
public static void main(String[] args) {
IntStream intStream = IntStream.rangeClosed(1,100);
intStream.forEach(s-> sum+=s);
System.out.println("총합 : "+sum); //총합 : 5050
sum = 0;
intStream = IntStream.range(1,100);
intStream.forEach(s-> sum+=s);
System.out.println("총합 : "+sum); //총합 : 4950
}
}
- rangeClosed() 메소드와 range() 메소드로 매개값의 범위에 해당하는 스트림을 생성
- 두 메소드의 차이는 rangeClosed는 1부터 100까지의 스트림을 얻는 반면, range 메소드는 1부터 99까지의 숫자를 스트림으로 얻는다.
파일로부터 스트림 얻기
public class FromFileContentExample {
public static void main(String[] args) throws IOException{
//본인들 파일 아무거나 프로젝트에 만들어서 패키지 주소따라 가시면 됩니다.
Path path = Paths.get("src/Stream/categoryPackage/linedata.txt");
Stream<String> stream;
//Files.lines() 메소드 이용, 운영체제의 기본 문자셋
stream = Files.lines(path, Charset.defaultCharset());
//메소드참조(s-> System.out.println(s)); 와 동일
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);
}
}
디렉토리로부터 스트림 얻기
public class FromDirectoryExample {
public static void main(String[] args) throws IOException{
//본인들 디렉토리 아무거나 파일탐색기에서 긁어오세요.
Path path = Paths.get("C:/eclipse_practice_workspace");
Stream<Path> stream = Files.list(path);
stream.forEach(p->System.out.println(p.getFileName()));
}
}
- Files 클래스의 list() 메소드에 해당 폴더의 path 정보가있는 Path 클래스를 매개값으로 넣어주면 Path 타입의 스트림을 반환함.
- getFileName() 메소드는 변수 p 아래 존재하는 자식 폴더/파일의 이름을 반환함.