Real Vectorism. 훨씬 더 입체적으로...
나만 몰랐던 람다식 본문
반응형
(동일내용입니다.)
나만 몰랐던 람다식
자바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 도 빨간줄 안뜨고 정상 문법이라고 해주는듯.
이런식으로도 사용할 수 있다는걸 나만 몰랐던 모양이다.
반응형
'Java (based by Spring Boot 2)' 카테고리의 다른 글
JwtUtil (0) | 2024.03.24 |
---|---|
스프링 웹플럭스에서 CSRF 토큰 때문에 페이지 요청이 모두 막히는 경우 (0) | 2023.07.26 |
html과 css가 application/json 으로 반환되는 문제 2 (EnableWebflux 어노테이션 관련) (0) | 2022.09.17 |
html과 css가 application/json 으로 반환되는 문제 (EnableWebflux 어노테이션 관련) (0) | 2022.08.15 |
너무 늦은 R2DBC 학습 (0) | 2022.08.10 |
Comments