рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ: рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░реАрдо
рд╕рд╛рдордЧреНрд░реА
рдХреНрдпрд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ:
- рдзрд╛рд░рд╛рдПрдБ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдбреЗрдЯрд╛ рдЕрдиреБрдХреНрд░рдо рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИрдВред
- рдбреЗрдЯрд╛ рдЕрдиреБрдХреНрд░рдо рдореЗрдВ рдлрд╝рд╛рдЗрд▓реЛрдВ рд╕реЗ рдкрдврд╝реА рдЧрдИ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдШрдЯрдирд╛рдПрдВ рдФрд░ рдбреЗрдЯрд╛ рд╣реЛрддреЗ рд╣реИрдВред
Stream
рдПрдкреАрдЖрдИ рд╕реЗ рдпрд╛ listen()
рд▓рд┐рдП Stream
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред- рдзрд╛рд░рд╛рдПрдБ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рдЬрд╡рд╛рдм рджреЗрдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИрдВред
- рджреЛ рдкреНрд░рдХрд╛рд░ рдХреА рдзрд╛рд░рд╛рдПрдБ рд╣реИрдВ:
single subscription
рдзрд╛рд░рд╛рдПрдБ рдФрд░ рдкреНрд░рд╕рд╛рд░рдгред
рдбрд╛рд░реНрдЯ рдореЗрдВ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╡рд┐рд╖реНрдп рдФрд░ рд╕реНрдЯреНрд░реАрдо рдХрдХреНрд╖рд╛рдУрдВ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИред
Future
рдПрдХ рдЖрд╕реНрдердЧрд┐рдд рдЧрдгрдирд╛ рд╣реИред рдпрджрд┐ рдХреЛрдИ рд╕рд╛рдорд╛рдиреНрдп рдлрд╝рдВрдХреНрд╢рди рдкрд░рд┐рдгрд╛рдо рджреЗрддрд╛ рд╣реИ, рддреЛ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдлрд╝рдВрдХреНрд╢рди Future
( future
) рдСрдмреНрдЬреЗрдХреНрдЯ рджреЗрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЕрдВрддрддрдГ рдкрд░рд┐рдгрд╛рдо рд╣реЛрдЧрд╛ред рдЬрдм рдСрдкрд░реЗрд╢рди рдкреВрд░рд╛ рд╣реЛ рдЬрд╛рдПрдЧрд╛ рддреЛ future
рдкрд░рд┐рдгрд╛рдо рд▓реМрдЯрд╛ рджреЗрдЧрд╛ред
рдПрдХ рдзрд╛рд░рд╛ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдШрдЯрдирд╛рдУрдВ рдХрд╛ рдПрдХ рдХреНрд░рдо рд╣реИред рдпрд╣ рдПрдХ Iterable
рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╡рд╕реНрддреБ рдХреЗ рд╕рдорд╛рди рд╣реИ, рдЬрд╣рд╛рдВ рдЖрдк рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдкрд░ рдЕрдЧрд▓реА рдШрдЯрдирд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдереНрд░реЗрдб рдШрдЯрдирд╛ рдХреЛ рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рддреЗ рд╣реИрдВ рдЬрдм рдпрд╣ рддреИрдпрд╛рд░ рд╣реЛрддрд╛ рд╣реИред
рд╕реНрдЯреНрд░реАрдо рдИрд╡реЗрдВрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛
рдзрд╛рд░рд╛рдПрдБ рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЛрдВ рд╕реЗ рдмрдирд╛рдИ рдЬрд╛ рд╕рдХрддреА рд╣реИрдВ, рдЬреЛ рдПрдХ рдЕрдиреНрдп рд▓реЗрдЦ рдХрд╛ рд╡рд┐рд╖рдп рд╣реИ, рд▓реЗрдХрд┐рди рд╡реЗ рд╕рднреА рдПрдХ рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ: рд▓реВрдк рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ (рдЖрдорддреМрд░ рдкрд░ рдЬрд┐рд╕реЗ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХреА рдЬрд╛рддреА рд╣реИ ) рд╕реНрдЯреНрд░реАрдо рдШрдЯрдирд╛рдУрдВ рдХреЛ рдкреБрдирд░рд╛рд╡реГрддреНрдд рдХрд░рддрд╛ рд╣реИ , рдЬреИрд╕реЗ рдПрдХ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓реВрдк рдкреБрдирд░рд╛рд╡реГрддреНрдд рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
Future<int> sumStream(Stream<int> stream) async { var sum = 0; await for (var value in stream) { sum += value; } return sum; }
рдпрд╣ рдХреЛрдб рдХреЗрд╡рд▓ рд╕реНрдЯреНрд░реАрдо рд╕реЗ рдкреВрд░реНрдгрд╛рдВрдХ рдИрд╡реЗрдВрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рдЙрдиреНрд╣реЗрдВ рдЬреЛрдбрд╝рддрд╛ рд╣реИ рдФрд░ ( future
) рд░рд╛рд╢рд┐ рд▓реМрдЯрд╛рддрд╛ рд╣реИред рдЬрдм рд▓реВрдк рдХрд╛ рд╢рд░реАрд░ рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдлрд╝рдВрдХреНрд╢рди рдЕрдЧрд▓реА рдШрдЯрдирд╛ рдпрд╛ рдереНрд░реЗрдб рдХреЗ рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рддрдХ рд░реБрдХ рдЬрд╛рддрд╛ рд╣реИред
рдлрд╝рдВрдХреНрд╢рди рдХреЛ async
рдХреЗ рд╕рд╛рде рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рд▓реВрдк рдХреЗ рд▓рд┐рдП рд╡реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдЖрд╡рд╢реНрдпрдХ рд╣реИред
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрджрд╛рд╣рд░рдг ( рдбрд╛рд░реНрдЯрдкреИрдб рдкрд░) async*
( рдиреЛрдЯ рдЬрдирд░реЗрдЯрд░ ) рдХреЗ рд╕рд╛рде рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреВрд░реНрдгрд╛рдВрдХреЛрдВ рдХреА рдПрдХ рд╕рд░рд▓ рдзрд╛рд░рд╛ рдмрдирд╛рдХрд░ рдкрд┐рдЫрд▓реЗ рдХреЛрдб рдХреА рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИ:
рдЙрджрд╛рд╣рд░рдг рдХреЛрдб рддреНрд░реБрдЯрд┐ рдШрдЯрдирд╛рдПрдБ
рдереНрд░реЗрдбреНрд╕ рддрдм рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рдЬрдм рдЙрдирдореЗрдВ рдХреЛрдИ рдЕрдзрд┐рдХ рдШрдЯрдирд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рдФрд░ рдХреЛрдб рдЬреЛ рдШрдЯрдирд╛рдУрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЕрдзрд┐рд╕реВрдЪрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдпрд╣ рдПрдХ рдирдИ рдШрдЯрдирд╛ рдХреЗ рдЖрдЧрдорди рдХреА рд╕реВрдЪрдирд╛ рд╣реИред рдЬрдм рдШрдЯрдирд╛рдУрдВ рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреАрдХреНрд╖рд╛ рдХреА рдЬрд╛рддреА рд╣реИ, рддреЛ рдзрд╛рд░рд╛ рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рдкрд░ рд▓реВрдк рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдзрд╛рд░рд╛ рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рддреНрд░реБрдЯрд┐ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИ; рдХрд┐рд╕реА рджреВрд░рд╕реНрде рд╕рд░реНрд╡рд░ рд╕реЗ рдХрд┐рд╕реА рдлрд╝рд╛рдЗрд▓ рдХреЛ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╕рдордп рд╢рд╛рдпрдж рдиреЗрдЯрд╡рд░реНрдХ рд╡рд┐рдлрд▓рддрд╛ рдпрд╛ рдШрдЯрдирд╛рдУрдВ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреЛрдб рдореЗрдВ рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реЛрддреА рд╣реИ, рдХрд┐рд╕реА рдХреЛ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рд╕реНрдЯреНрд░реАрдо рдбреЗрдЯрд╛ рдЗрд╡реЗрдВрдЯ рдХреА рддрд░рд╣ рдПрдХ рддреНрд░реБрдЯрд┐ рдШрдЯрдирд╛ рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдзрд┐рдХрд╛рдВрд╢ рдереНрд░реЗрдбреНрд╕ рдкрд╣рд▓реА рддреНрд░реБрдЯрд┐ рдХреЗ рдмрд╛рдж рдмрдВрдж рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдереНрд░реЗрдбреНрд╕ рдЬреЛ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рддреНрд░реБрдЯрд┐ рд▓реМрдЯрд╛рддреЗ рд╣реИрдВ рдФрд░ рдереНрд░реЗрдбреНрд╕ рдЬреЛ рдХрд┐рд╕реА рддреНрд░реБрдЯрд┐ рдИрд╡реЗрдВрдЯ рдХреЗ рдмрд╛рдж рдбреЗрдЯрд╛ рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рддреЗ рд╣реИрдВ, рд╕рдВрднрд╡ рд╣реИред рдЗрд╕ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ, рд╣рдо рдХреЗрд╡рд▓ рдЙрди рдереНрд░реЗрдбреНрд╕ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рджреЗрддреЗ рд╣реИрдВред
рдЬрдм рдХрд┐рд╕реА рд╕реНрдЯреНрд░реАрдо рдХрд╛ рдЗрдВрддрдЬрд╛рд░ рдХрд░рдирд╛ рдкрдврд╝рддрд╛ рд╣реИ , рддреЛ рд▓реВрдк рдСрдкрд░реЗрдЯрд░ рджреНрд╡рд╛рд░рд╛ рдПрдХ рддреНрд░реБрдЯрд┐ рдбрд╛рд▓реА рдЬрд╛рддреА рд╣реИред рдпрд╣ рднреА рд▓реВрдк рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИред рдЖрдк рддреНрд░реБрдЯрд┐ рдХреЛ рдкрдХрдбрд╝рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдирд┐рдореНрди рдЙрджрд╛рд╣рд░рдг рдореЗрдВ ( DartPad рдкрд░), рдПрдХ рддреНрд░реБрдЯрд┐ рддрдм рд╣реЛрддреА рд╣реИ рдпрджрд┐ рд▓реВрдк рдЗрдЯрд░реЗрдЯрд░ 4 рд╣реИ:
рдЙрджрд╛рд╣рд░рдг рдХреЛрдб рдзрд╛рд░рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВ
Stream
рдХреНрд▓рд╛рд╕ рдореЗрдВ рдХрдИ рд╕рд╣рд╛рдпрдХ рд╡рд┐рдзрд┐рдпрд╛рдБ рд╕рдореНтАНрдорд┐рд▓рд┐рдд рд╣реИрдВ рдЬреЛ рдПрдХ рдзрд╛рд░рд╛ рдкрд░ рд╕рд╛рдорд╛рдиреНтАНрдп рд╕рдВрдЪрд╛рд▓рди рдХрд░ рд╕рдХрддреА рд╣реИрдВ, Iterable рдореЗрдердб рдХреЗ рд╕рдорд╛рдиред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк Stream
рдПрдкреАрдЖрдИ рд╕реЗ lastWhere()
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рд╕рдмрд╕реЗ рдЫреЛрдЯрд╛ рд╕рдХрд╛рд░рд╛рддреНрдордХ рдкреВрд░реНрдгрд╛рдВрдХ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред
Future<int> lastPositive(Stream<int> stream) => stream.lastWhere((x) => x >= 0);
рд╕реНрдЯреНрд░реАрдо рдкреНрд░рдХрд╛рд░
рд╕рджрд╕реНрдпрддрд╛ рдзрд╛рд░рд╛рдПрдБ
рд╕рдмрд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рдХрд╛рд░ рдХреА рдзрд╛рд░рд╛ рдореЗрдВ рдШрдЯрдирд╛рдУрдВ рдХрд╛ рдПрдХ рдХреНрд░рдо рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдПрдХ рдмрдбрд╝реЗ рдкреВрд░реЗ рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рд╣реЛрддреЗ рд╣реИрдВред рдШрдЯрдирд╛рдУрдВ рдХреЛ рдЙрдирдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдХреЛ рдпрд╛рдж рдХрд┐рдП рдмрд┐рдирд╛ рд╕рд╣реА рдХреНрд░рдо рдореЗрдВ рд╡рд┐рддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдЙрд╕ рдкреНрд░рдХрд╛рд░ рдХреА рд╕реНрдЯреНрд░реАрдо рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдлрд╝рд╛рдЗрд▓ рдкрдврд╝рдиреЗ рдпрд╛ рд╡реЗрдм рдЕрдиреБрд░реЛрдз рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рджреМрд░рд╛рди рдорд┐рд▓рддреА рд╣реИред
рдРрд╕реА рдзрд╛рд░рд╛ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рд╕реБрдиреА рдЬрд╛ рд╕рдХрддреА рд╣реИред рдмрд╛рдж рдореЗрдВ рд╕реБрдирдиреЗ рдХрд╛ рдорддрд▓рдм рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╢реБрд░реБрдЖрддреА рдШрдЯрдирд╛рдУрдВ рдХреЛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рдП, рдФрд░ рдлрд┐рд░ рдмрд╛рдХреА рдзрд╛рд░рд╛ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИред рдЬрдм рдЖрдк рд╕реБрдирдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдбреЗрдЯрд╛ рдХреЛ рдирд┐рдХрд╛рд▓рд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдЯреБрдХрдбрд╝реЛрдВ рдореЗрдВ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдкреНрд░рд╕рд╛рд░рдг рдзрд╛рд░рд╛рдПрдБ
рдПрдХ рдЕрдиреНрдп рдкреНрд░рдХрд╛рд░ рдХреА рдзрд╛рд░рд╛ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рд▓рд┐рдП рд╣реИ рдЬрд┐рд╕реЗ рдПрдХ рд╕рдордп рдореЗрдВ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреА рдПрдХ рдзрд╛рд░рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдорд╛рдЙрд╕ рдШрдЯрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдПред
рдЖрдк рдХрд┐рд╕реА рднреА рд╕рдордп рдРрд╕реА рдзрд╛рд░рд╛ рдХреЛ рд╕реБрдирдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЖрдкрдХреЛ рд╕реБрдирдиреЗ рдХреЗ рджреМрд░рд╛рди рд╣реЛрдиреЗ рд╡рд╛рд▓реА рдШрдЯрдирд╛рдПрдВ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдВрдЧреАред рд╕реНрдЯреНрд░реАрдо рдХрдИ рд╢реНрд░реЛрддрд╛рдУрдВ рдХреЛ рд╕реБрди рд╕рдХрддрд╛ рд╣реИред рдЖрдк рдкрд┐рдЫрд▓реА рд╕рджрд╕реНрдпрддрд╛ рд░рджреНрдж рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдлрд┐рд░ рд╕реЗ рд╕реНрдЯреНрд░реАрдо рд╕реНрдЯреНрд░реАрдо рд╕реБрдирдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдлреНрд▓реЛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХреЗ рддрд░реАрдХреЗ
рд╕реНрдЯреНрд░реАрдо <T> рдореЗрдВ рдирд┐рдореНрди рд╡рд┐рдзрд┐рдпрд╛рдБ рдзрд╛рд░рд╛ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддреА рд╣реИрдВ рдФрд░ рдкрд░рд┐рдгрд╛рдо рд▓реМрдЯрд╛рддреА рд╣реИрдВ:
Future<T> get first; Future<bool> get isEmpty; Future<T> get last; Future<int> get length; Future<T> get single; Future<bool> any(bool Function(T element) test); Future<bool> contains(Object needle); Future<E> drain<E>([E futureValue]); Future<T> elementAt(int index); Future<bool> every(bool Function(T element) test); Future<T> firstWhere(bool Function(T element) test, {T Function() orElse}); Future<S> fold<S>(S initialValue, S Function(S previous, T element) combine); Future forEach(void Function(T element) action); Future<String> join([String separator = ""]); Future<T> lastWhere(bool Function(T element) test, {T Function() orElse}); Future pipe(StreamConsumer<T> streamConsumer); Future<T> reduce(T Function(T previous, T element) combine); Future<T> singleWhere(bool Function(T element) test, {T Function() orElse}); Future<List<T>> toList(); Future<Set<T>> toSet();
drain()
рдФрд░ pipe()
рдХреЛ рдЫреЛрдбрд╝рдХрд░ рдпреЗ рд╕рднреА рдХрд╛рд░реНрдп Iterable рдореЗрдВ рдПрдХ рд╕рдорд╛рди рдХрд╛рд░реНрдп рдХреЗ рдЕрдиреБрд░реВрдк рд╣реИрдВ ред рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЛ рд▓реВрдк рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрд╕рд╛рдиреА рд╕реЗ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдпрд╛ рдмрд╕ рдЕрдиреНрдп рддрд░реАрдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ)ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреБрдЫ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ:
рдирд╛рд▓реА () рдФрд░ рдкрд╛рдЗрдк () рдХреЛ рдЫреЛрдбрд╝рдХрд░ рдпреЗ рд╕рднреА рдХрд╛рд░реНрдп Iterable рдкрд░ рд╕рдорд╛рди рдХрд╛рд░реНрдп рдХреЗ рдЕрдиреБрд░реВрдк рд╣реИрдВред рд▓реВрдк рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХреЗ рд╕рд╛рде рдПрдХ async рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдпрд╛ рдмрд╕ рдЕрдиреНрдп рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ)ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреБрдЫ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ:
Future<bool> contains(Object needle) async { await for (var event in this) { if (event == needle) return true; } return false; } Future forEach(void Function(T element) action) async { await for (var event in this) { action(event); } } Future<List<T>> toList() async { final result = <T>[]; await this.forEach(result.add); return result; } Future<String> join([String separator = ""]) async => (await this.toList()).join(separator);
(рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЦреНрдпрддрдГ рдРрддрд┐рд╣рд╛рд╕рд┐рдХ рдХрд╛рд░рдгреЛрдВ рд╕реЗред)
рдкреНрд░рд╡рд╛рд╣ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ
рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рдирд┐рдореНрди рд╡рд┐рдзрд┐рдпрд╛рдБ рдореВрд▓ рдзрд╛рд░рд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рдирдИ рдзрд╛рд░рд╛ рд▓реМрдЯрд╛рддреА рд╣реИрдВред рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдореВрд▓ рдХрд┐рд╕реА рдХреЛ рд╕реБрдирдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдирдИ рдзрд╛рд░рд╛ рдХреЛ рд╕реБрдирдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИред
Stream<R> cast<R>(); Stream<S> expand<S>(Iterable<S> Function(T element) convert); Stream<S> map<S>(S Function(T event) convert); Stream<R> retype<R>(); Stream<T> skip(int count); Stream<T> skipWhile(bool Function(T element) test); Stream<T> take(int count); Stream<T> takeWhile(bool Function(T element) test); Stream<T> where(bool Function(T event) test);
рдЙрдкрд░реЛрдХреНрдд рд╡рд┐рдзрд┐рдпрд╛рдВ Iterable рдореЗрдВ рд╕рдорд╛рди рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реИрдВ, рдЬреЛ рдЪрд▓рдиреЗ рдпреЛрдЧреНрдп рд╡рд╕реНрддреБ рдХреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рдЪрд▓рдиреЗ рдпреЛрдЧреНрдп рд╡рд╕реНрддреБ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рд╕рдм рд▓реВрдк рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрд╕рд╛рдиреА рд╕реЗ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
Stream<E> asyncExpand<E>(Stream<E> Function(T event) convert); Stream<E> asyncMap<E>(FutureOr<E> Function(T event) convert); Stream<T> distinct([bool Function(T previous, T next) equals]);
asyncExpand()
рдФрд░ asyncMap()
рдлрд╝рдВрдХреНрд╢рди expand()
рдФрд░ map()
рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рдорд╛рди рд╣реИрдВ, рд▓реЗрдХрд┐рди рдлрд╝рдВрдХреНрд╢рди рддрд░реНрдХ рдХреЛ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдлрд╝рдВрдХреНрд╢рди рд╣реЛрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред distinct()
рдХрд╛рд░реНрдп Iterable рдореЗрдВ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
Stream<T> handleError(Function onError, {bool test(error)}); Stream<T> timeout(Duration timeLimit, {void Function(EventSink<T> sink) onTimeout}); Stream<S> transform<S>(StreamTransformer<T, S> streamTransformer);
рдЕрдВрддрд┐рдо рддреАрди рдХрд╛рд░реНрдп рдЕрдзрд┐рдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реИрдВред рдЗрдирдореЗрдВ рддреНрд░реБрдЯрд┐ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ рд╣реИ рдЬреЛ рд▓реВрдк рдХреЗ рд▓рд┐рдП рдкреНрд░рддреАрдХреНрд╖рд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдмрд╣реБрдд рдкрд╣рд▓реЗ рддреНрд░реБрдЯрд┐ рд▓реВрдк рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░ рджреЗрддрд╛ рд╣реИ рдФрд░ рд╕реНрдЯреНрд░реАрдо рдХреЛ рд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдм рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рд╣реИред рдЖрдк рд▓реВрдк рдХреЗ рд▓рд┐рдП рдкреНрд░рддреАрдХреНрд╖рд╛ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╕реНрдЯреНрд░реАрдо рд╕реЗ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рджреВрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП handleError()
рдХрд╛ handleError()
рдХрд░ рд╕рдХрддреЗ handleError()
ред
рдкрд░рд┐рд╡рд░реНрддрди () рдлрд╝рдВрдХреНрд╢рди рдХреЗрд╡рд▓ рддреНрд░реБрдЯрд┐ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рд╣реИ; рдпрд╣ рдзрд╛рд░рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдзрд┐рдХ рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд "рдорд╛рдирдЪрд┐рддреНрд░" рд╣реИред рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдорд╛рдирдЪрд┐рддреНрд░ рдХреЛ рдкреНрд░рддреНрдпреЗрдХ рдЖрдиреЗ рд╡рд╛рд▓реА рдШрдЯрдирд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдореВрд▓реНрдп рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ I / O рд╕реНрдЯреНрд░реАрдо рдХреЗ рд▓рд┐рдП, рдЖрдЙрдЯрдкреБрдЯ рдЗрд╡реЗрдВрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рдЗрдирдмрд╛рдЙрдВрдб рдЗрд╡реЗрдВрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред рд╕реНрдЯреНрд░реАрдордЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдорд░ рдЗрд╕рдХреА рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, Utf8Decoder рдЬреИрд╕реЗ рдбрд┐рдХреЛрдбрд░ рдЯреНрд░рд╛рдВрд╕рдлрд╛рд░реНрдорд░ рд╣реИрдВред рдПрдХ рдЯреНрд░рд╛рдВрд╕рдлрд╛рд░реНрдорд░ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рдЗрдВрдб () рдлрд╝рдВрдХреНрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬрд┐рд╕реЗ рдПрдХ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЖрд╕рд╛рдиреА рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
Stream<S> mapLogErrors<S, T>( Stream<T> stream, S Function(T event) convert, ) async* { var streamWithoutErrors = stream.handleError((e) => log(e)); await for (var event in streamWithoutErrors) { yield convert(event); } }
рдлрд╝рд╛рдЗрд▓ рдХреЛ рдкрдврд╝рдирд╛ рдФрд░ рдбрд┐рдХреЛрдб рдХрд░рдирд╛
рдирд┐рдореНрди рдХреЛрдб рдлрд╝рд╛рдЗрд▓ рдХреЛ рдкрдврд╝рддрд╛ рд╣реИ рдФрд░ рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рджреЛ рд░реВрдкрд╛рдВрддрд░рдг рдХрд░рддрд╛ рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ UTF8 рд╕реЗ рдбреЗрдЯрд╛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ LineSplitter рд╕реЗ рдЧреБрдЬрд░рддрд╛ рд╣реИред рд╣реИрд╢рдЯреИрдЧ ( #
) рд╕реЗ рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдХреЛ рдЫреЛрдбрд╝рдХрд░, рд╕рднреА рд▓рд╛рдЗрдиреЗрдВ рдкреНрд░рд┐рдВрдЯ рдХреА рдЬрд╛рддреА рд╣реИрдВред
import 'dart:convert'; import 'dart:io'; Future<void> main(List<String> args) async { var file = File(args[0]); var lines = file .openRead() .transform(utf8.decoder) .transform(LineSplitter()); await for (var line in lines) { if (!line.startsWith('#')) print(line); } }
рд╕реБрдиреЛ () рд╡рд┐рдзрд┐
listen()
рд╡рд┐рдзрд┐ рдПрдХ "рдирд┐рдореНрди-рд╕реНрддрд░реАрдп" рд╡рд┐рдзрд┐ рд╣реИ, рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдиреНрдп рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреЛ listen()
рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
StreamSubscription<T> listen(void Function(T event) onData, {Function onError, void Function() onDone, bool cancelOnError});
рдПрдХ рдирдИ рдкреНрд░рдХрд╛рд░ рдХреА рд╕реНрдЯреНрд░реАрдо рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдмрд╕ Stream
рдХреНрд▓рд╛рд╕ рдХреЛ рдЗрдирд╣реЗрд░рд┐рдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ listen()
рд╡рд┐рдзрд┐ рдХреЛ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЕрдиреНрдп рд╕рднреА Stream
рддрд░реАрдХреЗ рдХреЙрд▓ listen()
рдХреЛ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред
рд╕реБрдирдиреЗ () рд╡рд┐рдзрд┐ рдЖрдкрдХреЛ рд╕реНрдЯреНрд░реАрдо рдХреЛ рд╕реБрдирдирд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред рдЬрдм рддрдХ рдЖрдк рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░рддреЗ, рддрдм рддрдХ рд╕реНрдЯреНрд░реАрдо рдПрдХ рдЕрдХреНрд░рд┐рдп рд╡рд╕реНрддреБ рд╣реИ рдЬреЛ рдмрддрд╛рддреА рд╣реИ рдХрд┐ рдЖрдк рдХрд┐рди рдШрдЯрдирд╛рдУрдВ рдХреЛ рд╕реБрдирдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рд╕реБрдирддреЗ рд╕рдордп, StreamSubscription рдСрдмреНрдЬреЗрдХреНрдЯ рд▓реМрдЯрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдШрдЯрдирд╛рдУрдВ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рд╡рд╛рд▓реА рд╕рдХреНрд░рд┐рдп рдзрд╛рд░рд╛ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд╕рдорд╛рди рд╣реИ рдХрд┐ Iterable
рдХреЗрд╡рд▓ рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рд╕рдВрдЧреНрд░рд╣ рдХреИрд╕реЗ рд╣реИ, рдФрд░ рдПрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рд╡рд╣ рд╣реИ рдЬреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХрд░рддрд╛ рд╣реИред
рдЖрдк рд╕реНрдЯреНрд░реАрдо рдХреЛ рд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдм рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕реЗ рдкреЙрдЬрд╝ рдХреЗ рдмрд╛рдж рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд░рджреНрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдк рдХреЙрд▓рдмреИрдХ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдбреЗрдЯрд╛ рдИрд╡реЗрдВрдЯ рдпрд╛ рддреНрд░реБрдЯрд┐ рдИрд╡реЗрдВрдЯ рдХреЗ рд▓рд┐рдП рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛, рд╕рд╛рде рд╣реА рд╕рд╛рде рд╕реНрдЯреНрд░реАрдо рдмрдВрдж рд╣реЛрдиреЗ рдкрд░ рднреАред
рдФрд░ рдХреНрдпрд╛ рдкрдврд╝рдирд╛ рд╣реИ?
рдбрд╛рд░реНрдЯ 2. рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ: рд╡рд╛рдпрджрд╛