Ich habe eine Situation, in der ich eine Datenbank lese und eine List<String>
zurückschicke, wo jeder String ausgewählt und der Liste nach einigen Kriterien hinzugefügt wird. Die Methodensignatur ist:Ist es sicher für eine Methode, einen Stream <T> zurückzugeben?
public List<String> myMethod(String query, int limit)
Der zweite Parameter eine obere von der Größe der zurückgegebenen Liste (Einstellung limit=-1
jede Größenbeschränkung wird entfernen) gebunden enthält. Um zu vermeiden, dass diese Methode speicherintensiv wird, habe ich eine entsprechende Methode geschrieben, die anstelle einer Liste Stream<String>
zurückgibt. (Hinweis: Ich brauche keinen direkten Zugriff auf die zurückgegebenen Elemente oder jede andere Liste spezifische Funktionalität.)
Allerdings bin ich ein bisschen skeptisch, was eine Stream<>
Rückkehr, zumal das Verfahren öffentlich ist. Ist es sicher, eine öffentliche Methode zu haben, die eine Stream<>
in Java zurückgibt?
Unter bestimmten Umständen kann es einfacher und klarer sein, einen Iterable/Iterator zurückzugeben. Ich baue oft einen 'Iterator' in meinem Code. Einen 'Stream' aus einem' Iterator' zu machen ist ziemlich [einfach] (http://stackoverflow.com/q/21956515/823393). –
OldCurmudgeon
@OldCurmudgeon Wenn Sie 'Stream' zurückgeben, erhalten Sie' Iterator' fast kostenlos ('stream.iterator()'). –
@Marko - Einverstanden - aber Sie sind immer noch abwärtskompatibel mit Java 7 und früher, wenn Sie dann einen einfachen Adapter anbieten, um den 'Iterator' in Java 8 zu streamen. – OldCurmudgeon