Day 67

ChangWoo·2023년 6월 11일
0

자바의 정석

목록 보기
67/71
post-thumbnail

ch 14-13,14 메서드 참조, 생성자의 메서드 참조

메서드 참조(method reference)

  • 하나의 메서드만 호출하는 람다식은 '메서드 참조'로 간단히 할 수 있다.
  • 메서드 참조 = 클래스이름::메서드이름
  • static메서드 참조
Integer method(String s) {  // 그저 Integer.parseInt(String s)만 호출
	return Integer.parseInt(s);
}
* method --> int result = Integer.parseInt("123");

Function<String, Integer> f = (String s) -> Integer.parseInt(s);

Function<String, Integer> f = Integer::parseInt; // 메서드 참조

생성자의 메서드 참조

  • 생성자와 메서드 참조
Supplier<MyClass> s = () -> new MyClass(); // 매개변수가 없는 경우

Supplier<MyClass> s = MyClass::new;
Function<Integer, MyClass> s = (i) -> new MyClass(i); // 매개변수가 하나 있는 경우

Function<Integer, MyClass> s = MyClass::new;
  • 배열과 메서드 참조
Function<Integer, int[]> f = x -> new int[x]; // 람다식
Function<Integer, int[]> f2 = int[]::new; 	  // 메서드 참조 (배열타입[]::new)

ch 14-15,16 스트림, 스트림의 특징

스트림(Stream)

  • 다양한 데이터 소스를 표준화된 방법으로 다루기 위한 것
  • 데이터 소스 = 컬렉션, 배열
  • 스트림으로 작업 처리하기 : 1.스트림만들기 -> 2.중간연산(여러번) -> 3.최종연산(1번)
  • 스트림이 제공하는 기능 - 중간 연산과 최종 연산
  • 중간연산 - 연산결과가 스트림인 연산. 반복적으로 적용가능
  • 최종연산 - 연산결과가 스트림이 아닌 연산. 단 한번만 적용가능(스트림의 요소를 소모)

스트림(Stream)의 특징(1/3)

  • 스트림은 데이터 소스로부터 데이터를 읽기만할 뿐 변경하지 않는다.
  • 스트림은 Iterator처럼 일회용이다.(필요하면 다시 스트림을 생성해야 함)
  • 최종 연산 전까지 중간연산이 수행되지 않는다. - 지연된 연산

스트림(Stream)의 특징(2/3)

  • 스트림은 작업을 내부 반복으로 처리한다.
for(String str : strList)
	System.out.println(str);  --->	stream.forEach(System.out::println);
void forEach(Consumer<? super T> action) {
		Objects.requireNonNull(action);  // 매개변수의 널 체크
        for(T t : src)  // 내부 반복(for문을 메서드 안으로 넣음)
        	  action.accept(T);
  • 스트림의 작업을 병렬로 처리 - 병렬스트림
Stream<String> strStream = Stream.of("dd", "aaa", "CC", "cc", "b");
int sum = strStream.parallel()	// 병렬 스트림으로 전환(속성만 변경)
				.mapToInt(s -> s.length()).sum(); // 모든 문자열의 길이의 합
  • 병렬스트림 = 멀티쓰레드로 작업을 처리한다.
  • 기본형 스트림 - IntStream, LongStream, DoubleStream
    • 오토박싱&언박싱의 비효율이 제거됨(Stream< Integer > 대신 IntStream 사용)
    • 숫자와 관련된 유용한 메서드를 Stream< T >보다 더 많이 제공
profile
한 걸음 한 걸음 나아가는 개발자

0개의 댓글