- 스트림
- 컬랙션 및 배열의 요소를 반복처리
- 스트림 vs Iterator
- 내부 반복자이므로 처리 속도가 빠르고 병렬 처리에 효율적
- 람다식으로 다양한 요소 처리를 정의 가능
- 중간처리와 최종 처리를 수행하도록 파이프 라인을 형성가능
- 리스트→ 스트림
- Stream<리스트안의 객체 또는 변수의 타입> stream = 리스트객체.stream()
- 배열 →스트림
- Stream<리스트안의 객체 또는 변수의 타입> stream = Arrays.stream(배열)
- 숫자범위로부터 스트림 얻기 → IntStream or LongStream의 range(), rangeClosed()
- range(): 끝수 포함X
- rangeClosed() : 끝수 포함
- 필터링 : fileter, distinct
- 요소 변환 : map**
- Stream을 List나 Map으로 변환 → collect 사용
- List로 변환 toList()
- .collect(Collector.toList()); 사용
- 예)
- List<Student> honglist=list.stream() .filter(s->s.getName().equals("홍길동")) .collect( Collectors.toList());
- .collect(Collector.toList()); 사용
- Map으로 변환 toMap()
- .collect(Collector.toMap(
- s→s.* //키가 될 부분
- s→s.* //value가 될 부분
- ));
- 예)
- Map<Integer,String> map = list.stream() .filter(p ->p.getName().startsWith("홍")) .collect( Collectors.toMap( s->s.getScore(), s->s.getName() ) );
- List로 변환 toList()
- Optional클래스
- 단순히 집계값만 저장하는 것이 아니라, 집계값이 존재하지 않을 경우 디폴트 값을 설정하거나 집계값을 처리하는 Consumer를 등록할 수 있다.
- orElse→ 집계값이 없을 경우 디폴트값 설정
- 사용방법
double avg = list.stream()
.mapToInt(student ->student.getScore())
.average()
// .getAsDouble()
.orElse(0.0);
- 입출력 스트림
- 일차원적인 데이터의 흐름
- 흐름의 방향 : 입력 스트림/출력 스트림
- 데이터의 형태 : 문자 스트림(reader/writer)/바이트 스트림(input/output)
- file입출력
- FileReader의 reader(), InputStream의 write()는 읽을게 없으면 -1리턴
- close() 호출
- 예외처리 필수
- 직렬화와 역직렬화
- 직렬화 : 객체를 스트림으로 만드는 작업
- 역직렬화 : 스트림을 객체로 가져오는 작업
- 직렬화 가능한 클래스 구분 방법 → java.io.Serializable인터페이스르 구현하는 클래스는 직렬화 가능
- 연관관계로 참조되는 클래스도 java.io.Serializable인터페이스르 구현
- 저장(직렬화)
- new ObjectOutputStream(new FileOutputStream(저장할 파일 경로))
-
aㅁㅁㅁㅁpublic void savePhoneInfo() { ObjectOutputStream oos = null; try { oos = new ObjectOutputStream(new FileOutputStream("phoneInfo.txt")); oos.writeObject(phones); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); }finally { try { oos.close(); } catch (Exception e2) { // TODO: handle exception e2.printStackTrace(); } } }
- 불러오기(역직렬화)
- new ObjectInputStream(new FileInputStream(불러올 파일 경로))
public void loadPhoneInfo() {
ObjectInputStream ois = null;
try {
ois = new ObjectInputStream(new FileInputStream("phoneInfo.txt"));
phones = (List<PhoneInfo>)ois.readObject();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}finally {
try {
ois.close();
} catch (Exception e2) {
// TODO: handle exception
e2.printStackTrace();
}
}
}
반응형