如何从jsp中的数组项中选择不同的值

问题描述 投票:0回答:4

目前,我想显示列表项中的所有值,但我想删除重复值并仅向用户显示唯一值。

我尝试实现以下代码,但它不起作用。

<tr>
<td class="col-ss1 col1">Currency</td>
<c:forEach items="${listProducts}" var="item" varStatus="loop">
<td class="col-ss1 "><c:forEach items="${item.terms}" var="term" varStatus="mainLoop">
    <c:if test="${(mainLoop.index - 1) > 0}">
        <c:forEach var="previousTerm" items="${item.terms}" begin="0"
        end="${mainLoop.index-1}" varStatus="inner">
    <c:if test="${term.currencyType == previousTerm.currencyType }">
        <c:set var="flag" value="true"/>
    </c:if>
        </c:forEach>
    </c:if>
    <c:if test="${not flag}">${term.currencyType }</c:if>
</c:forEach></td>
</c:forEach>
<!-- <td class="col-ss1 col2">VNĐ / USD / EURO</td>
<td class="col-ss1 col3">VNĐ / USD / EURO</td>
<td class="col-ss1 col4">VNĐ / USD / EURO</td>
<td class="col-ss1 col5">VNĐ / USD / EURO</td> -->

jsp jstl el
4个回答
0
投票

强烈建议在服务器端的 java 类中执行此操作...

List<String> yourListContainingDublicates...
Set<String> uniqueElementsSet = new HashSet<String>(yourListContainingDublicates)

HashSet 构造函数通过调用元素的 equals() 方法来识别重复项。


0
投票

您可以使用以下示例代码供您参考

public class MyDisticntElements {


public static void printDistinctElements(int[] arr){

    for(int i=0;i<arr.length;i++){
        boolean isDistinct = false;
        for(int j=0;j<i;j++){
            if(arr[i] == arr[j]){
                isDistinct = true;
                break;
            }
        }
        if(!isDistinct){
            System.out.print(arr[i]+" ");
        }
    }
}

public static void main(String a[]){

    int[] nums = {5,2,7,2,4,7,8,2,3};
    MyDisticntElements.printDistinctElements(nums);
}
}

0
投票

我遇到了类似的问题,我只能使用 JSTL 来删除重复的条目,我决定修改你的代码,它似乎对我来说工作得很好。你可以试试这个:

<c:forEach items="${listProducts}" var="item" varStatus="loop"><td class="col-ss1 ">
   <c:forEach items="${item.terms}" var="term" varStatus="mainLoop">
        <c:set var="flag" value="false"/>
        <c:forEach var="previousTerm" items="${item.terms}" begin="${mainLoop.index+1}" varStatus="inner">
            <c:if test="${term.termName eq previousTerm.termName }">
                <c:set var="flag" value="true"/>
            </c:if>
        </c:forEach>
        <c:if test="${not flag}">
            ${term.currencyType }
        </c:if>
    </c:forEach></td>
</c:forEach>

0
投票

从 EL 3.0 开始,EL Stream API 就成为可能,EL Stream API 作为 Collection Operations 功能的一部分引入。 EL 3.0 是 2017 年 9 月推出的 Java EE 8 / Servlet 4.0 的一部分。自 Tomcat 9.x、WildFly 14.x、GlassFish/Payara 5.x 等起可用。

EL Stream API 支持

distinct()
函数,您可以使用它来删除重复项。

因此你的方法可以重写如下:

<c:forEach items="${listProducts}" var="item">
    <td>
        <c:forEach items="${item.terms.stream().map(term -> term.currencyType).sorted().distinct().toList()}" var="currencyType">
            ${currencyType}<br/>
        </c:forEach>
    </td>
</c:forEach>
© www.soinside.com 2019 - 2024. All rights reserved.