반응형
Recent Posts
Recent Comments
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

Real Vectorism. 훨씬 더 입체적으로...

나만 몰랐던 람다식 본문

Java (based by Spring Boot 2)

나만 몰랐던 람다식

grast 2022. 11. 20. 22:19
반응형
 

나만 몰랐던 람다식

나만 몰랐던 람다식 자바1.8 에서 도입되었지만 아직도 현업에서는 못믿겠다 기술적 이슈가 있다면서 안쓰...

blog.naver.com

(동일내용입니다.) 

 

나만 몰랐던 람다식

자바1.8 에서 도입되었지만 아직도 현업에서는 못믿겠다 기술적 이슈가 있다면서 안쓰는 람다식...

가장 먼저, stream api 를 사용하게 될 때 마주하기 쉬운 람다식은 stream api 에서 제공되는 map, flatMap, reduce, filter, collect, count 등이 있지만 그 안에서 구현해야 하는 람다식들은 다음과 같다.

 

람다식
구현해야 할 인터페이스
map
Function
flatMap
Function
reduce
BinaryOperator
filter
Predicate
collect
Supplier 외 다양함
count
(void)

그래서 주로 사용하게 된다면

List구현체.stream()
        .map(new Function<String, Integer>() {
            public Integer apply(String origin) {
                return 겁나편한유틸.integer로_변환해줌(origin);
            }
        });
;

의 형태가 되고, 이를 줄이면

List구현체.stream()
        .map((String origin) -> 겁나편한유틸.integer로_변환해줌(origin));

더 줄여서

List구현체.stream()
        .map(origin -> 겁나편한유틸.integer로_변환해줌(origin));

그런데 여기서 람다식의 input 으로 받은 데이터가 가공식의 패러미터로 바로 들어간다면

List구현체.stream()
        .map(겁나편한유틸::integer로_변환해줌);

과 같이 쓸 수가 있게 된다.

그런데......

intelliJ 에서 이상한 람다식이 보였다. 일단 도메인클래스는 다음과 같다.

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Roles {
    private String name; 
    private String desc;
}

권한과 등급을 구분해서 사용하기 위해 authority 와 role 을 구분지어서 사용하기로 했고, 그 안에는 name과 desc 외에도 다른 필드변수를 사용하지만 번잡해서 그냥 뺐다. 그리고 로그인 과정에서 List<Roles> 인 경우 map 에서 Roles 에서 String 으로 바꾸기 위해 roles -> roles.getName() 과 같은 방식으로 사용하기로 했다. 원래대로라면 다음과 같이 쓴다.

roleList.stream()
        .map(roleItem -> roleItem.getName());

그런데 intelliJ 에서는 이걸 한단계 더 줄일 수 있다고 한다.

roleList.stream()
        .map(Roles::getName);

확인을 해본 결과 eclipse 에서도 잘 먹히는 문법이다. 1.8 도 빨간줄 안뜨고 정상 문법이라고 해주는듯.

이런식으로도 사용할 수 있다는걸 나만 몰랐던 모양이다.

반응형
Comments