コンピュータクワガタ

かっぱのかっぱによるコンピュータ関連のサイトです

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