| 

.NET C# Java Javascript Exception

Impliziter Aufruf von next() beim Aufruf von Iterator.hasNext() bei FilteredNodeChildren?

Dies ist das Archiv des ehemaligen Forums zum Thema Groovy, Grails, Griffon und Bean Scripting Framework, welches unter groovy-forum.de existierte. Die neue Adresse des Groovy-Forums ist: http://codekicker.de/fragen/themen/groovy.


Impliziter Aufruf von next() beim Aufruf von Iterator.hasNext() bei FilteredNodeChildren?

Ulrich - 27.06.2008 13:00
Ich bekomme unterschiedliches Verhalten wenn ich Iterator.hasNext() direkt auf einer Collection oder auf einer mit findAll() reduzierten Untermenge der Collection anwende:

> it.children().iterator()
> it.children().findAll { true }.iterator()

der Iterator von "findAll" scheint implicit next() beim Aufruf von hasNext() aufzurufen. Mache ich was falsch, oder ist das ein Groovy 1.5.4 bug?

Danke,
Ulrich

 
package tst

import groovy.util.slurpersupport.NodeChild

class TestIteratorHasNext {
	
	static def xml = """<?xml version="1.0" encoding="UTF-8"?>
		<uml:Package xmi:version="2.1" xmlns:xmi="[schema.omg.org]; xmlns:uml="[www.eclipse.org]; xmi:id="_P0CuUENuEd2MFLNwOGyseQ" name="com.hp.qa-defect">
		  <packagedElement  name="KPI">
		    <ownedLiteral name="availabilty"/>
		    <ownedLiteral name="performance"/>
		    <ownedLiteral name="throughput "/>
		  </packagedElement>
		</uml:Package>"""
		
	static void main(args) {
		def	model = new XmlSlurper().parseText(xml)
		model.children().each() { processEnumeration(it) }
	}
	 
	private static void processEnumeration (NodeChild it){
			println "Caching Enumeration: " + it.@name.toString() 
			
			traverseIterator it.children().findAll { true }.iterator() 
			traverseIterator it.children().iterator()		
	}
	 
	private static void traverseIterator (Iterator i){
			String enumLiterals = ""
						
			while (i.hasNext()) {
				NodeChild nc = i.next()  
				def lit = nc.@name.toString()
				enumLiterals += lit + " "
				print  "       " + lit + ": " 
				print  " " + i.hasNext()
				print  " " + i.hasNext()
				print  " " + i.hasNext()
				println ""
				
				if (i.hasNext())
					enumLiterals += " | "
			}
			println "    Final String: " + enumLiterals
	}
}

Output ist

Caching Enumeration: KPI
availabilty: true true false
Final String: availabilty
availabilty: true true true
performance: true true true
throughput : false false false
Final String: availabilty | performance | throughput


Stelle deine Groovy-Frage jetzt!


Diese Seite zeigt den Thread "Impliziter Aufruf von next() beim Aufruf von Iterator.hasNext() bei FilteredNodeChildren?" der ehemaligen Webseite groovy-forum.de, welche durch einen Serverunfall zerstört wurde. codekicker.de hat viele Konversationen über die beliebte Programmiersprache Groovy und zugehörige Frameworks wie das Grails-Framework retten können.

Hast Du eine Frage zum Thema Groovy, Grails oder allgemein Java? Viele ehemalige groovy-forum.de Mitglieder beantworten dir auf codekicker.de deine Frage! Stelle jetzt eine Frage!

Viele weitere Diskussionen zu Grails und Groovy befinden sich auf der Threadübersicht des alten groovy-forum.de.