Skipping über Ihre Iterator/Iterable Verwirrung (und Iterable ist im Grunde ein Iterator Fabrik ..., so dass Sie einen Iterator oder so schreiben müssen), ich glaube, Sie so etwas wie dies bedeuten:
Iterator<Test> getTests(final Map<String,Test> testMap, final Set<String> strings) {
return new Iterator<Test>() {
private final Iterator<String> keyIter = strings.iterator();
private String lastKey;
public boolean hasNext() { return keyIter.hasNext(); }
public Test next() { lastKey = keyIter.next(); return testMap.get(lastKey); }
public void remove() { testMap.remove(lastKey); }
};
}
Und wenn Sie wollen ein Iterable zurückzukehren, na ja, das hat nur eine Fabrik für die sein:
Iterable<Test> getTests(final Map<String,Test> testMap, final Set<String> strings) {
return new Iterable<Test>() {
public Iterator<Test> iterator() {
return new Iterator<Test>() {
private final Iterator<String> keyIter = strings.iterator();
private String lastKey;
public boolean hasNext() { return keyIter.hasNext(); }
public Test next() { lastKey = keyIter.next(); return testMap.get(lastKey); }
public void remove() { testMap.remove(lastKey); }
};
}
};
}
für zusätzliche Kredite, können Sie diese Methode selbst parametrisieren und eine generische Art und Weise über eine Auswahl von Iterieren von einer Karte haben:
Map<String, Action> map;
Set<String> keys;
for (Action x : filterMap(map, keys)) {
}
Können Sie das nur ein wenig verdeutlichen? – user101884
Ihre Frage besagt, dass Sie einen Iterator erstellen möchten, aber der Rückgabewert von getTests() gibt ein Iterable zurück. Welches ist es? Und können Sie genau angeben, was das erwartete Verhalten des Iterierens über den von getTests() zurückgegebenen Wert ist? – NamshubWriter