JSPとELを見直そう No. 8 ELでLambdaを有効に使いたい2
今回は、forEachの対象をLambdaで絞り込んでみます。
まずServletで書籍のリストを準備します。
package com.example; import java.io.IOException; import java.util.ArrayList; import java.util.List; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet("/s08") public class S08Servlet extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { List<Book> bookList = new ArrayList<>(); bookList.add(new Book("よくわかるJSP", 2800)); bookList.add(new Book("よくわかるJava", 2500)); bookList.add(new Book("よくわかるSpring", 2980)); request.setAttribute("bookList", bookList); request.getRequestDispatcher("/08.jsp").forward(request, response); } }
次に、JSPです。セットしたbookListを絞り込んでいます。
<%@page contentType="text/html; charset=utf-8" %><%-- --%><!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>JSP</title> </head> <body> 2500円より高い本は<br> <c:forEach var="bookName" items="${bookList.stream().filter(v -> v.getPrice() > 2500).map(v -> v.getName()).toList()}"> <c:out value="${bookName}" /><br> </c:forEach> </body> </html>
bookListをfilterして2500円より高い本にし、mapで書名を抽出しています。
ソースは https://github.com/kuwalab/JSP にあります。
まとめ http://kuwalab.hatenablog.jp/entry/JSP
最初 http://kuwalab.hatenablog.jp/entry/JSP/01
前回 http://kuwalab.hatenablog.jp/entry/JSP/07
次回 http://kuwalab.hatenablog.jp/entry/JSP/09