Tag: iteration

JSTL – 使用forEach迭代用户定义的类

我需要将哪些方法添加到自定义Java类中,以便我可以迭代其中一个成员中的项目? 我找不到关于JSTL forEach标签实际如何工作的任何规范,所以我不确定如何实现它。 例如,如果我创建了一个通用的“ProjectSet”类,我想在JSP视图中使用以下标记: … 基本类文件: public class ProjectSet { private ArrayList projects; public ProjectSet() { this.projects = new ArrayList(); } // .. iteration methods ?? } 是否有任何接口我必须实现,如PHP的ArrayAccess或Iterator才能使其工作? 编辑:没有直接访问ArrayList本身,因为我可能会使用generics使用某种Set类,而JSP视图不应该知道类的内部工作。

Java LinkedHashSet向后迭代

如何迭代LinkedHashSet的项目从最后一项到第一项?

ConcurrentHashMap崩溃使用JDK 8编译但是以JRE 7为目标的应用程序

我今天遇到了一个非常意想不到的错误,虽然我能够找到一种方法来解决整个问题,但我不确定我是否完全理解它为什么会这样做。 我正在使用的代码最初是用JDK 7环境编写的,当然是针对JRE 7.在代码中我使用的是ConcurrentHashMap ,需要迭代映射中的键。 为此,我使用了map.keySet() ,根据JavaDocs,它应返回Set 。 这工作正常,直到我们的构建环境切换到JDK8。 当我们转移到JDK8时,我确保在调用javac时调用1.7的目标/源。 当代码在想要遍历地图的键时开始失败时,我感到非常惊讶。 没有抛出任何错误,没有exception,线程只是停止了。 在做了一些研究后,我发现Java8的ConcurrentHashMap实现.keySet()方法返回一个KeySetView 。 我通过使用map.keySet()切换到使用map.keys()获取Enumeration来map.keys() 。 现在我对这个问题的猜测是,虽然项目是针对Java7编译的,因为使用了JDK8,Java8库被包含在内,但为什么在它出现不匹配时它没有抛出错误或exception? 正如这里所要求的是一段代码片段: class MapProcessing { private ConcurrentHashMap map = new ConcurrentHashMap(); public MapProcessing() { map.put(“First”,new Object()); map.put(“Second”,new Object()); map.put(“Third”,new Object()); } public void processing() { // when calling this type of loop causes a freeze on our system. for(String […]

在迭代期间更改HashMap键

是否可以在迭代期间更改同一个HashMap实例的键? 因为映射条目集没有方法entry.setKey()。 现在我能想到的是创建另一个HashMap … MultipartParsingResult parsingResult = parseRequest(request); Map mpParams = parsingResult.getMultipartParameters(); Map mpParams2 = new HashMap(); Iterator<Entry> it = mpParams.entrySet().iterator(); while (it.hasNext()) { Entry entry = it.next(); String name = entry.getKey(); if (name.startsWith(portletNamespace)) { mpParams2.put(name.substring(portletNamespace.length(), name.length()), entry.getValue()); } else { mpParams2.put(name, entry.getValue()); } }