java - 如何使用 Lambda 表达式和 Stream API 或某种替代方式解析和过滤 JSP 或 JSTL 中的两个列表?

标签 java jsp lambda jstl

下面是两个列表的遍历

首先,我需要查找第二个列表是否有 ID 与第一个列表匹配的内容。所以不必要地我需要在第一次迭代中应用 for 循环

<c:forEach var="mock" items="${form.aktivityList}">

    <c:set value="false" var="ifAttachyExists" />
    <c:forEach var="doc1" items="${form.aktivityList}">
        <c:forEach var="doc1" items="${form.aktivityList}">
            <c:forEach items="${form.attachyList}" var="attachy">
                <c:if test="${ attachy.getId eq doc1.getId() }">
                    <c:set value="true" var="ifAttachyExists" />
                </c:if>
            </c:forEach>
        </c:forEach>
    </c:forEach>


    <c:if test="${ifAttachyExists}">
        <div class="table">
            <c:forEach items="${form.attachyList}" var="attachy">
                <c:if test="${ attachy.getId eq mock.getId() }">
                    DO THIS AND THIS AND THIS
                </c:if>
            </c:forEach>
        </div>
    </c:if>
</c:forEach>

一旦 Attachy 存在的值变为 true,我就会解析第二个列表并显示所需的结果。

代码看起来很破旧。如果我可以在 JSP 中使用 Lambda 表达式或 Stream API 或任何其他方法来处理这种情况,有人可以帮忙吗?

最佳答案

基于[1],我不建议尝试在 JSP 中解决这个问题,但我可以想到其他选项。

您可以使用静态方法创建一个 Java 类,它完全可以做您想做的事情,甚至可以根据您的需要调整输出。

public class CustomTag {

     public static List<> doTagAction(arguments....) {
          /*
           * put your logic here and return a list or what you need
           */
     }
}

可以通过 Taglib [2] 在您的 jsps 中轻松使用此静态方法。

<?xml version="1.0" encoding="ISO-8859-1"?>  
<taglib xmlns="http://java.sun.com/xml/ns/javaee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"
        version="2.1">

    <tlib-version>1.0</tlib-version>
    <short-name>your Taglib</short-name>

    <function>
        <name>doTagAction</name>
        <function-class>CustomTag</function-class>
        <function-signature>java.util.List doTagAction( /* your arguments */)</function-signature>
    </function>   
</taglib>

您只需通过标记引用即可在 jsp 中使用它!

[1] How to avoid Java code in JSP files?

[2] https://www.tutorialspoint.com/jsp/jsp_custom_tags.htm

关于java - 如何使用 Lambda 表达式和 Stream API 或某种替代方式解析和过滤 JSP 或 JSTL 中的两个列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44649606/

相关文章:

java - 对字符串数组中的 2 个字符串进行排序 (Java)

java - GlassFish 服务器部署权限被拒绝 :connect, false

java - 数据库中的用户名未显示在网页中?

java - 在服务器上发布本地生成的报告

c++ - 通过引用传递对 lambda 的引用

c# - 什么是等效于 SQL "in"语句的 lambda?

Java - AND 运算符不起作用

java - JTextfield循环文本问题

java - 在java中设置语言环境(语言支持)

c# - 在 linq 或 lambda 表达式中转换匿名对象的类型