스트림 요소 처리 (진행중)

최수정·2022년 11월 2일
0

이것이 JAVA다

목록 보기
4/10

1. 스트림이란

  • 컬렉션 및 배열의 요소를 반복 처리하기 위한 방법 ( for문 대신)

List컬렉션의 스트림

Stream<String> stream = list.stream();
Stream.forEach( item ->  );
// list 컬렉션의 stream() 메서드로 Stream 객체를 얻고, forEach() 메소드로 요소를 어떻게 처리할지를 람다식으로 제공

Set컬렉션의 스트림

// 컬렉션생성
Set<String> set = new HashSet<>();
set.add("홍길동")
set.add("최수정")

// Stream을 이용한 요소 반복 처리
Stream<String> stream = set.stream(); 
Stream.forEach( name -> System.out.println(name) );
// 출력 : 홍길동 \n 최수정
  • 장점
    1) 내부 반복자이므로 처리 속도가 빠르고 병렬 처리에 효율적이다.
    2) 람다식으로 다양한 요소 처리를 정의한다.
    3) 중간 처리와 최종 처리를 수행하도록 파이프 라인을 형성할 수 있다.

2. 내부 반복자

3. 중간 처리와 최종 처리

4. 리소스로부터 스트림 얻기

  • java.util.stream 패키지에는 스트림 인터페이스들이 있다.
  • 이 스트림 인터페이스들의 구현 객체는 다양한 리소스로부터 얻을 수 있다.
    주로 컬렉션과 배열에서 얻는다. ( 파일, 랜덤 수 등도 있음)

1) 컬렉션으로부터 스트림얻기

2) 배열으로부터 스트림얻기

4) 파일로부터 스트림얻기

  • `java.nio.file.Files의 lines() 메소드를 이용하면 텍스트 파일의 행 단위 스트림을 얻을 수 있다.
public class StreamExample {
  public static void main(String args) throws Exception {
  // data.text 파일의 경로 객체 얻기
     Path path = Paths.get(StreamExample.class.getResource("data.txr").toURI());
  // Path로부터 파일을 열고 한 행씩 읽으면서 문자열 스트림 생성, 기본 UTF-8 문자셋으로 읽음
  Stream<String> stream = Files.lines(path, Charset.defaultCharset());
  // 스트림 요소처리
  stream.forEach(line -> System.out.println(line) );
  stream.close();
  }
}

출력: txt파일의 내용이 한 행씩 전부 그대로 출력된다.
# 5. 요소 걸러내기 : 필터링
# 6. 요소 변환 : 매핑
# 7. 요소 정렬
# 8. 요소를 하나씩 처리 : 루핑
# 9. 요소 조건 만족 여부 : 매칭

10. 요소 기본 집계

  • 집계 : 대량의 데이터를 가공해서 하나의 값으로 축소하는 리덕션
  • 스트림이 제공하는 기본 집계 메소드 : 카운팅, 최대, 최소, 평균, 합계
  • 집계 메소드가 리턴하는 클래스가 optional class. 최종값을 저장하는 객체임. get(), getAsDouble() 등으로 호출하면 최종값을 얻는다

Optional 클래스

  • 단순 집계값 저장뿐 아니라 집계값이 존재한지 않을 경우 디폴트 값을 설정하거나
  • 집계값을 처리하는 Consumer를 등록 항 수 있음.
  • 본 클래스가 제공하는 메소드
    1) boolean isPresent() - 집계값이 있는지 여부
    2) void isPresent(Consumer) - 집계값이 있으면 Consumer에서 처리
    3) T,int,long,double orElse(T/int...) - 집계값이 없을 경우 디폴트값 설정
  • 컬렉션의 요소는 동적으로 추가되는 경우가 많다. 만약 컬렉션에 요소가 존재하지 않으면 NoSuchElementException발생

요소(집계값)이 없는 경우 대비하는 방법

1) isPresent() 메소드가 true를 리턴할 때만 집계값을 얻는다.
2) orElse() 매소드로 디폴트값 정하기
3)

링크: https://mangkyu.tistory.com/70

# 11. 요소 커스텀 집계
# 12. 요소 수집
# 13. 요소 병렬 처리

0개의 댓글