Also in C#, ich kann eine string[]
als IEnumerable<string>
behandeln.Java Arrays & Generics: Java entspricht C# IEnumerable <T>
Gibt es ein Java-Äquivalent?
Also in C#, ich kann eine string[]
als IEnumerable<string>
behandeln.Java Arrays & Generics: Java entspricht C# IEnumerable <T>
Gibt es ein Java-Äquivalent?
Iterable<String>
ist das Äquivalent von IEnumerable<string>
.
Es wäre eine Sonderstellung im Typsystem, wenn Arrays implementiert Iterable
. String[]
ist eine Instanz von Object[]
, aber Iterable<String>
ist keine Iterable<Object>
. Klassen und Schnittstellen können nicht dieselbe generische Schnittstelle mit verschiedenen generischen Argumenten implementieren.
String[]
funktioniert wie ein Iterable
in der erweiterten For-Schleife.
String[]
kann leicht in eine Iterable
gedreht werden:
Iterable<String> strs = java.util.Arrays.asList(strArray);
Bevorzugen Sammlungen über Arrays (für Nicht-Primitive sowieso). Arrays von Referenztypen sind ein bisschen seltsam und werden selten seit Java 1.5 benötigt.
Iterable <T>
Suchen Sie Iterable<String>
?
Iterable<T> <=> IEnumerable<T>
Iterator<T> <=> IEnumerator<T>
Ich glaube, das Java-Äquivalent ist Iterable<String>
. Obwohl String[]
es nicht implementieren ist, können Sie eine Schleife über die Elemente trotzdem:
String[] strings = new String[]{"this", "that"};
for (String s : strings) {
// do something
}
Wenn Sie wirklich brauchen etwas, das Iterable<String>
implementiert, können Sie dies tun:
String[] strings = new String[]{"this", "that"};
Iterable<String> stringIterable = Arrays.asList(strings);
Iterable<T>
ist OK, aber es gibt ein kleines Problem. Sie kann nicht einfach in stream()
, d. H. Lambda-Ausdrücken, verwendet werden.
Wenn Sie möchten, sollten Sie den Spliterator verwenden und die Klasse StreamSupport()
verwenden.
Für weitere Informationen über _why_ können Sie nicht zwischen Iterable werfen und Iterable
Okay, jetzt sprechen wir den 500-Pfund-Gorilla im Raum an. Wie benutzt du 'Iterable'? - Was ist die äquivalente "yield return" -Anweisung in Java? –
BrainSlugs83
@ BrainSlugs83 Ich denke, das ist eine andere Frage. –