람다와스트림

강진구·2024년 4월 12일

JAVA고급

목록 보기
4/4

클래스 :: 메서드

문법의 뜻: 클래스 안에 있는 메서드

  • 메서드를 매개변수로 넘겨줄 수 있다

람다식(익명함수)

// 기본적으로 문법은 다음과 같다
(파라미터 값, ...) -> { 함수 몸체 }

// 아래의 함수 두개는 같은 함수
// 이름 반환타입, return문 여부에 따라 {}까지도 생략이 가능
public int toLambdaMethod(int x, int y) {
	return x + y;
}

(x, y) -> x + y

// 이런 함수도 가능
public int toLambdaMethod2() {
	return 100;
}

() -> 100

// 모든 유형의 함수에 가능
public void toLambdaMethod3() {
	System.out.println("Hello World");
}

() -> System.out.println("Hello World")

스트림

한 번 더 추상화된 자료구조와 자주 사용하는 프로그래밍 API를 제공한 것

  • 자료구조를 한 번 더 추상화했기 때문에, 자료구조의 종류에 상관없이 같은 방식으로 다룰 수 있다
    ( + 병렬 처리에 유리한 구조로 조건부로 성능도 챙길 수 있다)
  • 조금 더 쉽게 “비유” 하자면, 자료구조의 “흐름”을 객체로 제공해 주고, 그 흐름 동안 사용할 수 있는 메서드들을 api로 제공해 주고 있는 것
  • 쉽게 말해서 자료구조의 흐름이다

스트림의 특징

  • 원본의 데이터를 변경하지 않는다

    • 자바 컬렉션으로부터 스트림(해당 컬렉션의 흐름)을 받아서 한 번 사용
  • 일회용이다
    - 한 번 사용한 스트림은 어디에도 남지 않는다

  • 위에 있는 것은 실제 java.collection 내부의 stream() 메서드다

  • collection에 정의되어 있기 때문에

  • 컬렉션을 상속하는 모든 구현체들은 스트림을 반환할 수 있다

스트림 기본 사용

  1. 스트림 받아오기
carsWantToPark.stream()
  1. 스트림 가공하기
.filter((Car car) -> car.getCompany().equals("Benz"))
  1. 스트림 결과 만들기
.toList();

자주 쓰이는 스트림 api

스트림 api는 너무 방대해서 한 번에 다 소개할 수도, 배울 수도 없다
코드를 마주할 때마다, 혹은 사용해 보면서 어떤 것들이 있는지 알아보는 것이 중요하다

  1. forEach()
List<String> carNames = Arrays.asList("Series 6", "A9", "Ionic 6");

carNames.stream()
    .forEach(System.out::println);

// 결과 
// Series 6
// A9
// Ionic 6
  • 각각의 원소에 넘겨받은 함수를 실행 해준다
  • 하지만 넘겨받은 반환값을 가지고 뭘 하지는 않는다, 있다고 해도 무시
  1. map()
carNames.stream()
	.map(name -> name.toUpperCase()).toList();

// 결과
// ["SERIES 6", "A9", "IONIC 6"]
  • forEach와는 반대로 넘겨받은 토대로 값을 변환시키는데 주로 사용

filter와 map의 차이

  • filter

    조건에 맞는 것만 반환

  • map

    모든 요소를 가공해서 반환

profile
기록하고,발전하자

0개의 댓글