1. 람다식
- (파라미터1, 파라미터2) -> EL 수식
- 변수에 함수를 할당할 수 있다.
<%@ page contentType="text/html; charset=utf-8" %>
<!DOCTYPE html>
<html>
<head>
<title>asdf</title>
</head>
<body>
<!--객체 이름 출력을 막기위해 세미콜론(;) 연산자 사용 후 빈 문자열 '' 출력-->
${greaterThan = (a,b) -> a > b ? "yes" : "no!"; ''}
<p>${greaterThan(5,10)}</p>
<p>${greaterThan(10,2)}</p>
</body>
</html>
2. 스트림 API
-
Java8의 스트림이 아닌 EL에 내장된 스트림 사용
-
스트림 생성
${list.stream()}
<%@ page contentType="text/html; charset=utf-8" %>
<%@ page import="java.util.Arrays" %>
<%@ page import="java.util.List" %>
<%
List<Long> list = Arrays.asList(1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L);
request.setAttribute("list", list);
%>
<!DOCTYPE html>
<html>
<head>
<title>스트림</title>
</head>
<body>
<p>${list.stream().toList()}</p>
</body>
</html>
출력결과
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
filter()
걸러내기- 람다식을 파라미터로 갖는다.
- 스트림 각 원소에 대해 람다식을 실행한다.
- 람다식의 결과가 true인 원소들로 새로운 스트림을 생성한다.
${list.stream().filter(x -> x%2 == 0).toList()}
출력결과
[2, 4, 6, 8, 10]
map()
변환- 람다식을 파라미터로 갖는다.
- 스트림 각 원소에 대해 람다식을 실행한다.
- 람다식의 결과들로 구성된 새로운 스트림을 생성한다.
${list.stream().map(x -> x*x).toList()}
출력결과
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
sorted()
정렬- 람다식을 파라미터로 갖는다.
- Java에서 정렬을 위해서는 객체가
Comparable
인터페이스를 구현해야 한다. - EL에서는
Comparable
을 대신할 람다식을sorted()
에 파라미터로 주어야한다. - 람다식은 두 개의 파라미터를 갖는다.
- 두 파라미터 중 먼저 들어온 것이 앞에 오게하려면 -1, 뒤에 오게하려면 1을 리턴해준다.
- 정렬된 새로운 스트림을 생성한다.
<%--default는 오름차순이다.--%>
${list.stream().sorted().toList()}
<%--내림차순 정렬 --%>
${list.stream().sorted((x1,x2) -> x1 > x2 ? -1 : 1).toList()}
<%--나이순 정렬. 상상해서 만든 객체이므로 출력결과는 보여주지 않는다.--%>
${membersList.stream().sorted((mem1, mem2) -> mem1.age > mem2.age ? -1 : 1).toList()}
출력결과
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
limit()
갯수제한- 앞의 n개만 선택해서 새로운 스트림을 생성한다.
${list.stream().limit(3).toList()}
출력결과
[1, 2, 3]
count()
갯수 세기- 스트림 원소의 수를 리턴한다.
- Long 타입이다.
${list.stream().count()}
출력결과
10
-
최종 집계 API
sum()
총합max()
최대값min()
최소값average()
평균
-
sum()
을 제외한 나머지 3개는 결과가 객체 형태이므로 출력을 하려면.get()
을 붙여야한다.
${list.stream().sum()} <%--합--%>
${list.stream().max().get()} <%--최대--%>
${list.stream().min().get()} <%--최소--%>
${list.stream().average().get()} <%--평균--%>
출력결과
55
10
1
5.5
get()
은 스트림이 비어있거나 결과가 없을 경우 예외(exception)을 던진다.- 결과가 없을 경우 기본값을 지정하려면
orElse()
를 사용한다.
- 결과가 없을 경우 기본값을 지정하려면
${[].stream().max().orElse(10)} <%--최대값. 없으면 10--%>
${[].stream().min().orElse(0)} <%--최소값. 없으면 0--%>
${list.stream().max().orElse(100)} <%--최대값 있으므로 10 출력--%>
출력결과
10
0
10
- 값이 존재하는지 아닌지에 따라 true/false를 return하는
ifPresent()
${maxSquared = '-'; ''} <%--EL변수 선언 및 '-'로 초기화--%>
${list.stream().max().ifPresent(x -> (maxSquared = x*x))} <%--리스트 최대값 존재하면 제곱해서 maxSquared에 할당--%>
${maxSquared} <%--출력--%>
출력결과
100
- 존재 여부 확인 API
- 람다식을 파라미터로 받는다.
- 스트림 각 원소에 대해 람다식을 실행하고 그 결과에 따라 true/false 리턴
anyMatch()
하나라도 존재allMatch()
모두 만족noneMatch()
아무것도 만족하지 않음
${list.stream().anyMatch(x -> x > 3).get()}<%--3보다 큰 원소가 존재하면 true--%>
${list.stream().allMatch(x -> x > 5).get()}<%--모든 원소가 5보다 크면 true--%>
${list.stream().noneMatch(x -> x%2 == 0).get()}<%--짝수가 없으면 true--%>
true
false
false
'웹 > JSP' 카테고리의 다른 글
15. EL(Expression Language) 메소드 호출 (0) | 2020.07.21 |
---|---|
14. EL(Expression Language) 연산자 (0) | 2020.07.21 |
13. EL(Expression Language) 기본 (0) | 2020.07.21 |
12. 세션(Session) (0) | 2020.07.19 |
11. 쿠키(Cookie) (0) | 2020.07.19 |