자바의 람다식 / 참조 / 스트림을 알아보자

문지은·2021년 9월 13일
0

Java

목록 보기
2/4

자바를 공부하다가 신기한 문법을 발견했다. 화살표를 사용하는 문법,,, C++ 이후로는 코드에서 화살표를 본 것이 처음이었기에 찾아보니 자바 8부터 도입된 람다식이라고 한다. 오늘은 람다식에 대해서 알아보도록 하자.

람다식이란?

이름이 없는 메소드, 익명 함수

(매개변수1, 매개변수2, ...) -> {실행문}
코드를 간결하게 만들고 가독성이 높아진다! 밑에는 내가 사용했던 예시이다.

item -> {
    Assert.notNull(item, "GrantedAuthority에는 null이 들어가면 안 됩니다.");    
    return new SimpleGrantedAuthority(ROLE_PREFIX + item.get("authority"));
}

메소드 참조 / 생성자 참조란?

메소드 참조는 람다식에서 단 하나의 메소드를 호출할 경우 사용 가능!
더더더 간결하게!

같은 원리로 생성자도 참조 가능하다.

(a, b) -> a.a 메소드(b)
a 클래스::a 메소드

// 메소드 참조
(String s) -> Integer.parseInt(s);		// 람다
Integer::parseInt;		// 메소드 참조

// 생성자 참조
() -> new TreeMap<K, V>();		// 람다
TreeMap<K, V>::new;		// 생성자 참조

스트림이란?

람다를 활용할 수 있는 기술! 자료의 흐름이란 뜻을 가지며 배열과 컬렉션을 함수형으로 처리할 수 있다.

ArrayList<Integer> list = new ArrayList<Integer>();

list.add(1);
list.add(2);
list.add(3);
list.add(4);

Stream<Integer> stream = list.stream();		// 스트림 생성
stream.forEach(System.out::println);		// 메소드 참조, 스트림 이용해서 순차 출력

// 한 줄로 표현 가능
list.stream().forEach(System.out::println);
  • findFirst() : 첫번째 요소 리턴
  • findAny() : 필터를 적용해서 조건에 맞는 요소 리턴
  • map() : 변환

아래는 내가 사용했던 예시이다.

String expectAuthority = newbieUser.getAuthorities()
                .stream()
                .findFirst()
                .map(GrantedAuthority::getAuthority)
                .map(auth -> "ROLE_" + auth)
                .orElse(null);

newbieUser 의 getAuthorities 를 이용해서 가져온 stream의 첫번째 요소를 map을 이용해서 GrantedAuthority의 getAuthority로 변환 후 ROLE_를 붙여준다.

profile
백엔드 개발자입니다.

0개의 댓글