下面是两个列表的遍历
首先,我需要查找第二个列表是否有 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 中使用它!
关于java - 如何使用 Lambda 表达式和 Stream API 或某种替代方式解析和过滤 JSP 或 JSTL 中的两个列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44649606/