[신세계I&C KDT][Java 프로그래밍] #15 Stream API (0327)

박현아·2024년 3월 27일
0

신세계아이앤씨 KDT

목록 보기
15/42

1. 메서드 참조 (method reference)

1) 개념

: 람다 표현식의 축약된 표현 방법

(1) static 메서드 사용

클래스명::static메서드명

(2) 인스턴스 메서드 사용

참조변수명::메서드명 (단, 참조변수가 파라미터인 경우에는 클래스명::메서드명 형식 사용)

(3) new 이용한 생성자 호출

클래스명::new

(4) Sysout

System.out::println

2. Stream API

1) 용도

이전 사용 형태
: 컬렉션, 배열, 파일에서 읽어서 출력 및 간단한 작업 (컬렉션에 값 추가, 삭제, 수정)
Stream API
: 컬렉션, 배열, 파일에서 Stream 타입을 얻으면, Stream 안에 정렬, 필터, 가공 기능 등 내장되어 있음

2) 사용

  • 컬렉션, 배열, 파일
  • Stream 타입을 얻음
  • 중간 처리 (정렬, 가공, 중복제거, skip 등)
  • 최종 처리 (총합, 평균, 최대값, 최소값, 갯수, 컬렉션 타입 변경 - List, Map으로 변경, 반복 출력)

3) 스트림 얻는 방법

(1) 컬렉션

List<String> list = Arrays.asList("박현아", "문지해", "지다솜");
Stream<String> s = list.stream();

(2) 배열

String[] names = {"박현아", "문지해", "지다솜"};
Stream<String> s = Arrays.stream(names);
Stream<String> s2 = Stream.of(names);
Stream<String> s3 = Stream.of("박현아", "문지해", "지다솜");

4) 중간 처리

-> 중간 처리는 처리 후 대부분이 Stream이 반환됨

(1) 중복 제거

: distinct()

(2) 필터링

: filter(Predicate)

(3) 가공

: map(Function), mapToInt(ToIntFunction) -> 파라미터 한 개 입력되면 리턴값 한 개
: flatMap(Function) : Stream -> 하나의 파라미터로 여러 개의 요소들로 구성된 새로운 Stream을 반환한다.
예> 입력: "a/b/c"
리턴: [a,b,c] 형태의 Stream 반환됨
: 반환값이 정수라면 flatMapToInt​(Function<? super T,​? extends IntStream> mapper)

(4) 정렬

  • 배열
Arrays.sort(배열); // 오름차순
Arrays.sort(배열, Comparator); // 내림차순
  • 컬렉션
Collections.sort(컬렉션, Comparator);
  • Stream
sorted()
sorted(Comparator)
sorted(Comparator.comparing(t->t.getEng()) // 권장, 기본은 오름차순
sorted(Comparator.comparing(t->t.getEng(), Comparator.reverseOrder()) // 내림차순

(5) 갯수 제한 및 skip

  • limit(n)
  • skip(n)

4) 최종 처리

(1) 체크

allMatch(Predicate) : 모든 값이 만족하는지 체크
anyMatch(Predicate) : 최소 한 개 값이 만족하는지 체크
noneMatch(Predicate) : 모두 만족 안 하는지 체크

(2) 그룹핑 메서드

  • 합계 sum() : 리턴타입 int
  • 평균 average() : OptionalDouble
  • 최대값 max() : OptionalInt
  • 최소값 min() : OptionalInt
  • 갯수 count() : long

-> Stream 아니고 IntStream인 경우에 사용할 수 있다 (count() 제외 !!!)
-> 중간처리와 연계해서 작업 가능

(3) 컬렉션 타입 변환

  • list로 변경
  • map 으로 변경
    예> .stream().collect(Collectors.toList());
    .stream().중간처리.collect(Collectors.toList()); // toMap(k,v)

4) 컬렉션 대상의 그룹핑 메서드

collect(Collectors.counting()); //갯수
collect(Collectors.summingInt(t->t.getEng())); // 합
collect(Collectors.averagingDouble(t->t.getEng())); // 평균
collect(Collectors.maxBy(Comparator.comparing(Student8::getEng))); // 최대값
collect(Collectors.minBy(Comparator.comparing(Student8::getEng))) // 최소값

0개의 댓글