본문 바로가기

Douzon/java

14일차

  • 스트림
    • 컬랙션 및 배열의 요소를 반복처리
    • 스트림 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());
      •  
      • 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() ) );
  • 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(저장할 파일 경로))
          • 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();
            			}
            		}
            	}
            
            aㅁㅁㅁㅁ
        • 불러오기(역직렬화)
          • 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();
			}
		}
	}

 

반응형

'Douzon > java' 카테고리의 다른 글

16일차  (0) 2023.05.20
15일차 File Class  (0) 2023.05.18
13일차  (0) 2023.05.16
12일차  (0) 2023.05.15
11일  (2) 2023.05.14