如何解决将Stream <Item>转换为Stream <List <Item >>
Directort(path).list()
返回Stream<FileSystemEntity>
。
我要返回Stream<List<FileSystemEntity>>
。
示例:
1 => 1
2 => 1,2
3 => 1,2,3
解决方法
来自
scan
的 rxdart
运算符是最佳答案
https://pub.dev/documentation/rxdart/latest/rx/ScanExtension/scan.html
https://rxjs.dev/api/operators/scan
Stream<FileSystemEntity> source$ = ...;
Stream<List<FileSystemEntity>> result$ = source$.scan(
(acc,element,_) => [...acc,element],[],);
,
您可以使用包装对象来存储列表
以此为起点
class StreamToStreamList<T> {
StreamToStreamList(this._parent);
final Stream<T> _parent;
final _values = <T>[];
Stream<List<T>> toStream() async* {
await for (final value in _parent) {
_values.add(value);
yield _values;
}
}
}
,
final result = Directory(path)
// get subentries of the path dir
.list()
// getting only sub-directories (assumtion is that you are interested in those only)
.where((dir) => dir is Directory)
// casting them to Directory object
.cast<Directory>()
// processing each dir getting its sub-entries
.map((dir) => dir.listSync())
;
编辑:当您希望结果也将文件也作为流中列表的单个元素时的情况:
final result = Directory(path)
// get sub-entries of the path dir
.list()
// processing each entry so dir entry -> list of dir sub entries and file entry -> list containing one file as single element
.map((dir) {
if(dir is Directory) {
return dir.listSync();
} else {
return [dir];
}
})
;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。