Iterator - Java - Programmation
Marsh Posté le 07-10-2003 à 16:28:17
Quel est le but de
Iterator it = (Iterator)maHash.values().iterator();
Citation : |
non l'itérateur te permet d'accéder aisément à une collection qui contient tes objets, nuance
Citation : |
bin si
tout dépend comment tu as construis ta hashmap déjà. Montre réellement le code que tu fais tourner pour voir déjà ...
Marsh Posté le 07-10-2003 à 16:28:52
Chez moi ca marche:
Code :
|
Donne nous un bout code complet et le message de l'exception, ca sera plus simple.
Marsh Posté le 07-10-2003 à 16:31:40
Ba soit t'insères pas un monObjet dans ton insert de HashMap, soit tu nous dis pas tout
Marsh Posté le 07-10-2003 à 16:33:55
Shogun2002 a écrit : En gros il veut pas me caster l'Objet en monObjet ... |
il veut pas
mais pitié, achevez le quoi
tu vas le montrer ton code? La JVM elle fait ce que tu lui demandes hein (enfin pour des trucs aussi basiques)
Marsh Posté le 07-10-2003 à 16:38:38
DarkLord a écrit : |
Sauf si elle est d'humeur taquine
Marsh Posté le 07-10-2003 à 16:39:06
Taiche a écrit : |
par exemple
dans le cas d'un iterator et d'une hashmap j'ai comme un doute
Marsh Posté le 07-10-2003 à 16:39:16
DarkLord a écrit : |
Marsh Posté le 07-10-2003 à 16:43:16
C du JSP
monMap étant la HashMap et GradGrille l'objet.
while (rs1.next()) {
%>
<%=
rs1.getString("nomc" )
%>
<%
classes.GradGrille v = new classes.GradGrille(rs1.getInt("id" ),rs1.getInt("grilleid" ),rs1.getInt("pos" ),rs1.getString("nomc" ),rs1.getString("noml" ),rs1.getFloat("valeur" ));
monMap.put(String.valueOf(i),v);
i++;
}
%>
Ensuite
<%
iteMap=monMap.values().iterator();
%>
LA TAILLE<%= monMap.size() %>
<%
i=0;
while (i!=monMap.size()) {
i++;
classes.GradGrille monGrad = (classes.GradGrille)iteMap.next();
%>
<%=
monGrad.nomL
%>
Et l'erreur :
java.lang.ClassCastException
at org.apache.jsp.grille_jsp._jspService(grille_jsp.java:132)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:137)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:210)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:295)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:256)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2415)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:171)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:172)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:223)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:594)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:392)
at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:565)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:619)
at java.lang.Thread.run(Thread.java:536)
Marsh Posté le 07-10-2003 à 16:46:40
monMap.put(String.valueOf(i),v);
[...]
classes.GradGrille monGrad = (classes.GradGrille)iteMap.next();
Et tu t'étonnes qu'y a une ClassCastException ? T'entres une String et tu la castes en GradGrille, forcément ça se viande
Marsh Posté le 07-10-2003 à 16:50:06
put(Object key, Object value)
Associates the specified value with the specified key in this map.
Bah c la clé ou la valeur qui est pris en compte dans l'iterateur ?
Marsh Posté le 07-10-2003 à 16:51:47
Taiche a écrit : |
Je rappel:
Code :
|
Citation : |
Marsh Posté le 07-10-2003 à 16:52:58
Ah ouais, chu passé à côté du v, autant pour moi
Marsh Posté le 07-10-2003 à 16:55:39
Pis juste un truc : fais pas ton while() sur la taille de ta HashMap, c'est pas terrible. T'as la méthode hasNext() sur ton Iterator, donc utilise-la puisque c'est sur ton Iterator que t'appelles next() et non sur la HashMap.
Marsh Posté le 07-10-2003 à 16:58:32
Taiche a écrit : Pis juste un truc : fais pas ton while() sur la taille de ta HashMap, c'est pas terrible. T'as la méthode hasNext() sur ton Iterator, donc utilise-la puisque c'est sur ton Iterator que t'appelles next() et non sur la HashMap. |
Ok
Marsh Posté le 07-10-2003 à 17:10:02
Ben maintenant ça marche ....
je sais pas ce que que j'ai touché ....
Mais en effacant et en reecrivant la meme chose, ça fonctionne !
Et désolé à ceux qui ont perdu leur temps sur mon post
Marsh Posté le 07-10-2003 à 17:15:40
ben t'essayais de caster un null en tonObjet
Marsh Posté le 07-10-2003 à 17:16:16
ça aurait marché avec while (i<monMap.size()) { ...
Marsh Posté le 07-10-2003 à 17:19:00
Marsh Posté le 07-10-2003 à 16:22:54
Quand on convertit une HashMap en un iterator, de type :
maHash->HashMap=> avec un String comme clé et monObjet comme valeur
Iterator it = (Iterator)maHash.values().iterator();
C bien les Objet valeur (value) qui sont stocké dans l'iterator ?
Et pourquoi ensuite lorsque je fais un :
monObjet lobjet = (monObjet)it.next();
Il me sort une java.lang.ClassCastException
Donc je peux plus pas reprendre mon objet qui était dans ma HashMap ?