티스토리 뷰

람다식

* Lambda Expression

* 함수처럼 파라미터를 가진 코드 블록으로 익명 함수를 지칭하는 용어이다.

* 일종의 함수처럼 사용이 가능하다. (호출, 재귀)

 

1) 람다식 형식

( 파라미터1, 파라미터2) -> EL식

* 예1) a가 b보다 큰 경우 true를 리턴하고, 크지 않다면 false를 리턴하는 람다식

( a, b) -> a>b ? true : false

* 예2) 람다식을 EL에서 사용

${ greaterEx = (a, b)-> a>b ? true : false ; " } 

* 람다식을 greaterEx 변수에 할당하는 코드이다. 책의 예제는 결과를 출력하지 않기 위해 세미콜론 연산자를 사용했다.

* 람다식은 일종의 함수로, 위 처럼 할당한 변수를 함수처럼 호출할 수 있다. 또한 병수에 할당하지 않고 바로 사용도 가능하다.

 

스트림 API

* EL3.0버전에서 반복문을 제공하지 않기때문에 컬렉션 객체를 위한 스트림 API가 추가되었다. 

* 예) 합 구하기

<c:set var="data" value="<%= java.util.Arrays.asList(1,2,3,4) %>" />

<c:set var="sum" value=" ${data.stream().sum()}" />

* 예) 세미콜론 연산자와 할당 연산자를 이용해 EL만으로 계산 결과를 sum 변수에 할당

${ data = [1, 2, 3, 4]; sum = data.stream().sum() ; "}

 

1) 기본

* 기본 형태

* 스트림 생성 뒤 스트림은 다음 연산으로 원소를 차례대로 제공한다.

* 스트림 객체의 중간 연산 메소드는 변환 과정을 거친 뒤 새로운 스트림 객체를 생성한다. (생략 가능)

* 최종 연산은 스트림에 있는 데이터를 읽어와 최종 결과를 생성한다. 

 

2) 스트림 생성

* 스트림 메소드를 이용한 스트림 객체를 생성 : 객체.stream()

* 스트림 생성 뒤 중간 연산과 최종 연산을 거쳐 새로운 결과를 생성한다.

* EL은 Map타입의 stream()을 제공하지 않는다. 아래는 EL에서의 stream()사용 방법이다.

 

<p><%

    java.util.Map<String, String> map = new java.util.HashMap<>();

    map.put("color1","빨간색");

    map.put("color2","파란색");

    request.setAttribute("map", map);

%> 

    ${map.entrySet().stream().map(entry-> entry.value).toList()}

</p>