foreach - 为什么我使用 foreach 总是得到 ArrayIndexOutOfBoundsException

标签 foreach java-stream indexoutofboundsexception

我使用流将旧代码更改为新代码。 但是当我启动 tomcat 时,它不断出现

ERROR o.s.web.servlet.DispatcherServlet - Context initialization failed org.springframework.beans.factory.BeanDefinitionStoreException: Failed to read candidate component class: file xxx(my FilePath) nested exception is java.lang.ArrayIndexOutOfBoundsException: 25091"

谁能告诉我这个错误的原因是什么?我非常感谢您的帮助。

/*old*/
for(String key:paramMap.keySet()){
    if(key.startsWith("NUMBER_OF_") ){
        String value = request.getParameter(key);
        if(value!=null && !value.equals("")){
            br.append(key.replace("NUMBER_OF_", "")).append(" = ")
                .append('"').append(value).append('"').append(" and ");
        }
    }
}

/*new*/
new ArrayList<>(paramMap.keySet()).stream().filter(p -> p.startsWith("NUMBER_OF_")).forEach(
    o ->{
        String value = request.getParameter(o);
        if(value!=null && !value.equals("")){
            br.append(o.replace("NUMBER_OF_", "")).append(" = ")
                .append('"').append(value).append('"').append(" and ");
        }
    });

整个堆栈跟踪:

org.springframework.beans.factory.BeanDefinitionStoreException: Failed to read candidate component class: file [D:\apache-tomcat-7.0.61\webapps\web\WEB-INF\classes\com\ais\brm\web\controllers\system\metadic\MetaDicManageController.class]; nested exception is java.lang.ArrayIndexOutOfBoundsException
org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider.findCandidateComponents(ClassPathScanningCandidateComponentProvider.java:260)
org.springframework.context.annotation.ClassPathBeanDefinitionScanner.doScan(ClassPathBeanDefinitionScanner.java:242)
org.springframework.context.annotation.ComponentScanBeanDefinitionParser.parse(ComponentScanBeanDefinitionParser.java:84)
org.springframework.beans.factory.xml.NamespaceHandlerSupport.parse(NamespaceHandlerSupport.java:73)
org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1419)
org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1409)
org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:184)
org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.doRegisterBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:140)
org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.registerBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:111)
org.springframework.beans.factory.xml.XmlBeanDefinitionReader.registerBeanDefinitions(XmlBeanDefinitionReader.java:493)
org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:390)
org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:334)
org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:302)
org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:174)
org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:209)
org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:180)
org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:125)
org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:94)
org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:131)
org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:522)
org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:436)
org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:631)
org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:588)
org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:645)
org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:508)
org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:449)
org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:133)
javax.servlet.GenericServlet.init(GenericServlet.java:158)
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:423)
org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1079)
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:620)
org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:318)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
java.lang.Thread.run(Thread.java:745)

最佳答案

根据this ,您需要 Spring 版本至少 4.0.3 才能支持 java 8 功能。

关于foreach - 为什么我使用 foreach 总是得到 ArrayIndexOutOfBoundsException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43319942/

相关文章:

javascript - 如何对触发 JavaScript 函数的按钮使用 php foreach 循环

java - 如何通过 Java 流收集具有特定功能的现有列表元素的新列表?

java多线程模板基准测试

Java增强for循环和IndexOutOfBoundsException?

java - ArrayList 错误,应用程序崩溃

javascript - 对于每个不适用于通过单击创建的元素

r - 允许 foreach worker 注册并分发子任务给其他 worker

php - 如何在 PHP 中按日期(今天、昨天、8 月 29 日、28 日等)对 SQL 中的 foreach 项目进行排序?

java - 使用 Java Streams 将 double 映射汇总为聚合的 BigDecimal

java.lang.IndexOutOfBoundsException : Index: 1, 大小:1 在 Jidesoft DocumentPane 中