我需要从一个项目数组中删除重复项

时间:2011-06-15 09:31:00

标签: arrays jsp jstl set

我不是一个真正的编码人员,所以请谈谈我所谓的代码的不同方面。对于实际上被称为事物的事情我可能是错的......

无论如何我(相信)我有一个项目数组,其中包含附加到每个项目的大量不同数据。然后我迭代这个数组将内容放入我的jsp中。问题是数组包含重复项,我不想在主页上的演示文稿中重复。

我已经像一个怪物谷歌搜索,我发现删除重复项的方法是将数组转换为一个集合,因为一个集合不能包含重复项。很公平。我已经检查了不同的页面,描述了如何进行,但我不明白:(

这可能非常简单,但是从我可以做到的,这些集合包含字符串,并且不会为我做,因为我的项目有很多数据附加到他们item.name,item.type等。

我使用的代码是

<c:forEach items="${results.searchResults}" var="foundItem" varStatus="status">
    <c:set var="curItem" value="${foundItem.item}" />
    <%-- get item details --%>
    <xmlfeed:getItemXML item="${curItem}" />
</c:forEach>

我想要做的是确保所有的curItem都是独一无二的。我敢打赌,最好的方法是确保将“results.searchResults”数组放入一个集合然后再转回,但我只是不明白该怎么做。

或许值得一提的是,上面的代码实际上已经在一个带有以下taglibs的标签内:

taglib prefix =“c”uri =“http://java.sun.com/jsp/jstl/core”

taglib prefix =“fmt”uri =“http://java.sun.com/jsp/jstl/fmt”

以及当然的自定义xmlfeed tablib

2 个答案:

答案 0 :(得分:1)

result对象中有一个List<Item> searchResults变量?您可以将其更改为Set<String> searchResults;,并在设置器或任何其他设置searchResults变量的数据的方法中进行this.searchResults = new HashSet<String>(resultlist);

以下代码可能不是您的确切方式,但它将有助于找到您自己的方式.....

public class Result {

    private List<String> result;
    private Set<String> searchResults;

    public Set<String> getSearchResults() {
        return searchResults;
    }

    public void setResult(List<String> result) {
        this.result = result;
        this.searchResults = new HashSet<String>(result);
    }
}

Servlet代码,

List<String> list = new ArrayList<String>();
list.add("A");
list.add("B");
list.add("A");
list.add("B");
list.add("A");
Result result = new Result();
result.setResult(list);
request.setAttribute("result", result);

request.getRequestDispatcher("testPage.jsp").forward(request, response);

在JSP中,

<c:forEach items="${result.searchResults}" var="foundItem" varStatus="status">
    <c:set var="curItem" value="${foundItem}" />
    ${curItem}<br>
</c:forEach>

答案 1 :(得分:0)

    public Set<String> searchResults()
{
    List<String> list = new ArrayList<String>();
    list.add("A");list.add("B"); list.add("A");list.add("B");list.add("A");
    return new HashSet<String>(list);
}

以上代码返回唯一列表。