Stream1. рдХрдХреНрд╖рд╛ рдХреЗ рддрд░реАрдХреЛрдВ рдХреА рд╕реВрдЪреА

рдХреНрд▓рд╛рд╕ рдХреЛ рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░реАрдо рдХреА рдЪреЗрди рдмрдирд╛рдирд╛Stream рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ ред рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХрдХреНрд╖рд╛ рдореЗрдВ рдРрд╕реА рд╡рд┐рдзрд┐рдпрд╛рдБ рд╣реИрдВ рдЬреЛ рдирдИ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд▓реМрдЯрд╛рддреА рд╣реИрдВредStream<T>Stream

рдЗрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░реАрдо рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдХреНрд░рд┐рдпрд╛ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрдк рдЙрдиреНрд╣реЗрдВ рд╢реНрд░реГрдВрдЦрд▓рд╛рдУрдВ рдореЗрдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рд▓реИрдореНрдмреНрдбрд╛ рдлрд╝рдВрдХреНрд╢рди рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ , рддреЛ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╡рд╛рдВрдЫрд┐рдд рдЖрдЙрдЯрдкреБрдЯ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рддрдВрддреНрд░ рд╣реИред рдЬрд▓реНрдж рд╣реА рдЖрдк рдЕрдкрдиреЗ рд▓рд┐рдП рджреЗрдЦреЗрдВрдЧреЗред

рдпрд╣рд╛рдБ рд╡рд░реНрдЧ рдХреЗ рддрд░реАрдХреЗ рд╣реИрдВ Stream(рдХреЗрд╡рд▓ рд╕рдмрд╕реЗ рдмреБрдирд┐рдпрд╛рджреА рд╡рд╛рд▓реЗ):

рддрд░реАрдХреЛрдВ рд╡рд┐рд╡рд░рдг
Stream<T> of()
рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдПрдХ рд╕рдореВрд╣ рд╕реЗ рдПрдХ рдзрд╛рд░рд╛ рдмрдирд╛рддрд╛ рд╣реИ
Stream<T> generate()
рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд┐рдпрдо рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдПрдХ рдзрд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ
Stream<T> concat()
рджреЛ рдзрд╛рд░рд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝рддрд╛ рд╣реИ
Stream<T> filter()
рдбреЗрдЯрд╛ рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рддрд╛ рд╣реИ, рдХреЗрд╡рд▓ рдЙрд╕ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдЧреБрдЬрд░рддрд╛ рд╣реИ рдЬреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд┐рдпрдо рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ
Stream<T> distinct()
рдбреБрдкреНрд▓реАрдХреЗрдЯ рд╣рдЯрд╛рддрд╛ рд╣реИред рдкрд╣рд▓реЗ рд╕реЗ рд╕рд╛рдордирд╛ рдХрд┐рдП рдЬрд╛ рдЪреБрдХреЗ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдкрд╛рд╕ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ
Stream<T> sorted()
рдбреЗрдЯрд╛ рдХреЛ рдХреНрд░рдордмрджреНрдз рдХрд░реЗрдВ
Stream<T> peek()
рдзрд╛рд░рд╛ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдкрд░ рдПрдХ рдХреНрд░рд┐рдпрд╛ рдХрд░рддрд╛ рд╣реИ
Stream<T> limit(n)
рдХрд╛рдЯ-рдЫрд╛рдБрдЯ рдХреА рдЧрдИ рд╕реНрдЯреНрд░реАрдо рд▓реМрдЯрд╛рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдпрд╣ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕реАрдорд╛ рд╕реЗ рдЕрдзрд┐рдХ рди рд╣реЛ
Stream<T> skip(n)
рдкрд╣рд▓реЗ n рддрддреНрд╡реЛрдВ рдХреЛ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИ
Stream<R> map()
рдбреЗрдЯрд╛ рдХреЛ рдПрдХ рдкреНрд░рдХрд╛рд░ рд╕реЗ рджреВрд╕рд░реЗ рдкреНрд░рдХрд╛рд░ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддрд╛ рд╣реИ
Stream<R> flatMap()
рдбреЗрдЯрд╛ рдХреЛ рдПрдХ рдкреНрд░рдХрд╛рд░ рд╕реЗ рджреВрд╕рд░реЗ рдкреНрд░рдХрд╛рд░ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддрд╛ рд╣реИ
boolean anyMatch()
рдЬрд╛рдВрдЪрддрд╛ рд╣реИ рдХрд┐ рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рдХрдо рд╕реЗ рдХрдо рдПрдХ рддрддреНрд╡ рд╣реИ рдЬреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд┐рдпрдо рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ
boolean allMatch()
рдЬрд╛рдВрдЪрддрд╛ рд╣реИ рдХрд┐ рдзрд╛рд░рд╛ рдореЗрдВ рд╕рднреА рддрддреНрд╡ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд┐рдпрдо рд╕реЗ рдореЗрд▓ рдЦрд╛рддреЗ рд╣реИрдВ рдпрд╛ рдирд╣реАрдВ
boolean noneMatch()
рдЬрд╛рдВрдЪрддрд╛ рд╣реИ рдХрд┐ рдзрд╛рд░рд╛ рдореЗрдВ рдХреЛрдИ рднреА рддрддреНрд╡ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд┐рдпрдо рд╕реЗ рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддрд╛ рд╣реИ
Optional<T> findFirst()
рдкрд╛рдпрд╛ рдЧрдпрд╛ рдкрд╣рд▓рд╛ рддрддреНрд╡ рд▓реМрдЯрд╛рддрд╛ рд╣реИ рдЬреЛ рдирд┐рдпрдо рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ
Optional<T> findAny()
рдирд┐рдпрдо рд╕реЗ рдореЗрд▓ рдЦрд╛рдиреЗ рд╡рд╛рд▓реЗ рдХрд┐рд╕реА рднреА рддрддреНрд╡ рдХреЛ рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рд▓реМрдЯрд╛рддрд╛ рд╣реИ
Optional<T> min()
рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рдиреНрдпреВрдирддрдо рддрддреНрд╡ рдХреА рдЦреЛрдЬ рдХрд░рддрд╛ рд╣реИ
Optional<T> max()
рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рдЕрдзрд┐рдХрддрдо рддрддреНрд╡ рд▓реМрдЯрд╛рддрд╛ рд╣реИ
long count()
рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рддрддреНрд╡реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд▓реМрдЯрд╛рддрд╛ рд╣реИ
R collect()
рд╕реНрдЯреНрд░реАрдо рд╕реЗ рд╕рднреА рдбреЗрдЯрд╛ рдкрдврд╝рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реМрдЯрд╛рддрд╛ рд╣реИ

Stream2. рд╡рд░реНрдЧ рджреНрд╡рд╛рд░рд╛ рдордзреНрдпрд╡рд░реНрддреА рдФрд░ рдЯрд░реНрдорд┐рдирд▓ рд╕рдВрдЪрд╛рд▓рди

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрдкрд░реЛрдХреНрдд рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рд╕рднреА рд╡рд┐рдзрд┐рдпрд╛рдВ a рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдХрд░рддреА рд╣реИрдВ Streamред рдпрд╣ рдЗрд╕ рддрдереНрдп рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ рдХрд┐ рд╡рд░реНрдЧ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЛ рдордзреНрдпрд╡рд░реНрддреА ( рдЧреИрд░-рдЯрд░реНрдорд┐рдирд▓ рдХреЗ рд░реВрдк рдореЗрдВ рднреА рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ ) рд╡рд┐рдзрд┐рдпреЛрдВ рдФрд░ рдЯрд░реНрдорд┐рдирд▓ рд╡рд┐рдзрд┐рдпреЛрдВ StreamрдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред

рдордзреНрдпрд╡рд░реНрддреА рддрд░реАрдХреЗ

рдЗрдВрдЯрд░рдореАрдбрд┐рдПрдЯ рд╡рд┐рдзрд┐рдпрд╛рдВ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рд▓реМрдЯрд╛рддреА рд╣реИрдВ рдЬреЛ StreamрдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреА рд╣реИ, рдФрд░ рдЙрдиреНрд╣реЗрдВ рдПрдХ рд╕рд╛рде рдЬрдВрдЬреАрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдЯрд░реНрдорд┐рдирд▓ рддрд░реАрдХреЗ

рдЯрд░реНрдорд┐рдирд▓ рд╡рд┐рдзрд┐рдпрд╛рдБ рдПрдХ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреЛрдИ рдорд╛рди рд▓реМрдЯрд╛рддреА рд╣реИрдВ Streamред

рд╡рд┐рдзрд┐ рдХреЙрд▓ рдкрд╛рдЗрдкрд▓рд╛рдЗрди

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЖрдк рдХрд┐рд╕реА рднреА рдЗрдВрдЯрд░рдореАрдбрд┐рдПрдЯ рд╡рд┐рдзрд┐рдпреЛрдВ рдФрд░ рдЕрдВрдд рдореЗрдВ рдПрдХ рдЯрд░реНрдорд┐рдирд▓ рд╡рд┐рдзрд┐ рдХреЙрд▓ рд╡рд╛рд▓реА рдПрдХ рд╕реНрдЯреНрд░реАрдо рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдХреЛрдб рдкрдардиреАрдпрддрд╛ рдХреЛ рдмрдврд╝рд╛рддреЗ рд╣реБрдП, рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЖрдкрдХреЛ рдЬрдЯрд┐рд▓ рддрд░реНрдХ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рджреЗрддрд╛ рд╣реИред

рд╡рд┐рдзрд┐ рдХреЙрд▓ рдкрд╛рдЗрдкрд▓рд╛рдЗрди

рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░реАрдо рдХреЗ рдЕрдВрджрд░ рдбреЗрдЯрд╛ рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ рдмрджрд▓рддрд╛ рд╣реИред рдЗрдВрдЯрд░рдореАрдбрд┐рдПрдЯ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдбреЗрдЯрд╛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЪрд┐рдХрдирд╛ (рдШреЛрд╖рдгрд╛рддреНрдордХ) рддрд░реАрдХрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЯрд░реНрдорд┐рдирд▓ рд╡рд┐рдзрд┐ рдХреЗ рдмрд╛рдж рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдпрджрд┐ рдЯрд░реНрдорд┐рдирд▓ рд╡рд┐рдзрд┐ рдХреЛ рдирд╣реАрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рдбреЗрдЯрд╛ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдЯрд░реНрдорд┐рдирд▓ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд╣реА рд╕реНрдЯреНрд░реАрдо рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд┐рдпрдореЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдбреЗрдЯрд╛ рд╕рдВрд╕рд╛рдзрд┐рдд рд╣реЛрдирд╛ рд╢реБрд░реВ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

stream()
  .intemediateOperation1()
  .intemediateOperation2()
  ...
  .intemediateOperationN()
  .terminalOperation();
рдПрдХ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреА рд╕рд╛рдорд╛рдиреНрдп рдЙрдкрд╕реНрдерд┐рддрд┐

рдордзреНрдпрд╡рд░реНрддреА рдФрд░ рдЯрд░реНрдорд┐рдирд▓ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреА рддреБрд▓рдирд╛:

рдордзреНрдпрдо рдЯрд░реНрдорд┐рдирд▓
рд╡рд╛рдкрд╕реА рдХрд╛ рдкреНрд░рдХрд╛рд░ Stream рдПрдХ рдирд╣реАрдВStream
рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реА рдкреНрд░рдХрд╛рд░ рдХреЗ рдХрдИ рддрд░реАрдХреЛрдВ рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рд╣рд╛рдБ рдирд╣реАрдВ
рдПрдХрд▓ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдореЗрдВ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛрдИ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ
рдЕрдВрддрд┐рдо рдкрд░рд┐рдгрд╛рдо рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ рдирд╣реАрдВ рд╣рд╛рдБ
рдбреЗрдЯрд╛ рдХреЛ рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдирд╛ рдкреНрд░рд╛рд░рдВрдн рдХрд░рддрд╛ рд╣реИ рдирд╣реАрдВ рд╣рд╛рдБ

рдЖрдЗрдП рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВред

рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╢реБ рдкреНрд░реЗрдорд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреНрд▓рдм рд╣реИред рдХрд▓ рдХреНрд▓рдм рдЬрд┐рдВрдЬрд░ рдХреИрдЯ рдбреЗ рдордирд╛рдПрдЧрд╛ред рдХреНрд▓рдм рдореЗрдВ рдкрд╛рд▓рддреВ рдЬрд╛рдирд╡рд░реЛрдВ рдХреЗ рдорд╛рд▓рд┐рдХ рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рдкрд╛рд╕ рдкрд╛рд▓рддреВ рдЬрд╛рдирд╡рд░реЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рд╣реИред рд╡реЗ рдмрд┐рд▓реНрд▓рд┐рдпреЛрдВ рддрдХ рд╣реА рд╕реАрдорд┐рдд рдирд╣реАрдВ рд╣реИрдВред

рдХрд╛рд░реНрдп: рдХрд▓ рдХреЗ "рдкреЗрд╢реЗрд╡рд░ рдЕрд╡рдХрд╛рд╢" рдХреЗ рд▓рд┐рдП рдЙрдирдХреЗ рд▓рд┐рдП рд╡реНрдпрдХреНрддрд┐рдЧрдд рдЧреНрд░реАрдЯрд┐рдВрдЧ рдХрд╛рд░реНрдб рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рд╕рднреА рдЕрджрд░рдХ рдмрд┐рд▓реНрд▓рд┐рдпреЛрдВ рдХреЗ рд╕рднреА рдирд╛рдореЛрдВ рдХреА рдкрд╣рдЪрд╛рди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЧреНрд░реАрдЯрд┐рдВрдЧ рдХрд╛рд░реНрдбреНрд╕ рдХреЛ рдмрд┐рд▓реНрд▓реА рдХреА рдЙрдореНрд░ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХреНрд░рдордмрджреНрдз рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рд╕рдмрд╕реЗ рдкреБрд░рд╛рдиреЗ рд╕реЗ рд▓реЗрдХрд░ рд╕рдмрд╕реЗ рдХрдо рдЙрдореНрд░ рддрдХред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдЗрд╕ рдХрд╛рд░реНрдп рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рд╕рд╣рд╛рдпрддрд╛ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдХрдХреНрд╖рд╛рдПрдВ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ:

public enum Color {
   WHITE,
   BLACK,
   DARK_GREY,
   LIGHT_GREY,
   FOXY,
   GREEN,
   YELLOW,
   BLUE,
   MAGENTA
}
public abstract class Animal {
   private String name;
   private Color color;
   private int age;

   public Animal(String name, Color color, int age) {
      this.name = name;
      this.color = color;
      this.age = age;
   }

   public String getName() {
      return name;
   }

   public Color getColor() {
      return color;
   }

   public int getAge() {
      return age;
   }
}
public class Cat extends Animal {
   public Cat(String name, Color color, int age) {
      super(name, color, age);
   }
}
public class Dog extends Animal {
   public Dog(String name, Color color, int age) {
      super(name, color, age);
   }
}
public class Parrot extends Animal {
   public Parrot(String name, Color color, int age) {
      super(name, color, age);
   }
}
public class Pig extends Animal {
   public Pig(String name, Color color, int age) {
      super(name, color, age);
   }
}
public class Snake extends Animal {
   public Snake(String name, Color color, int age) {
      super(name, color, age);
   }
}
public class Owner {
   private String name;
   private List<Animal> pets = new ArrayList<>();

   public Owner(String name) {
      this.name = name;
   }

   public List<Animal> getPets() {
      return pets;
   }
}

рдЕрдм рдЖрдЗрдП рдЙрд╕ Selectorрд╡рд░реНрдЧ рдкрд░ рдирдЬрд░ рдбрд╛рд▓рддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдорд╛рдирджрдВрдбреЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЪрдпрди рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class Selector {
   private static List<Owner> owners;

   private static void initData() {
      final Owner owner1 = new Owner("Ronan Turner");
      owner1.getPets().addAll(List.of(
            new Cat("Baron", Color.BLACK, 3),
            new Cat("Sultan", Color.DARK_GREY, 4),
            new Dog("Elsa", Color.WHITE, 0)
      ));

      final Owner owner2 = new Owner("Scarlet Murray");
      owner2.getPets().addAll(List.of(
            new Cat("Ginger", Color.FOXY, 7),
            new Cat("Oscar", Color.FOXY, 5),
            new Parrot("Admiral", Color.BLUE, 3)
      ));

      final Owner owner3 = new Owner("Felicity Mason");
      owner3.getPets().addAll(List.of(
            new Dog("Arnold", Color.FOXY, 3),
            new Pig("Vacuum Cleaner", Color.LIGHT_GREY, 8)
      ));

      final Owner owner4 = new Owner("Mitchell Stone");
      owner4.getPets().addAll(List.of(
            new Snake("Mr. Boa", Color.DARK_GREY, 2)
      ));

      final Owner owner5 = new Owner("Jonathan Snyder");
      owner5.getPets().addAll(List.of(
            new Cat("Fisher", Color.BLACK, 16),
            new Cat("Zorro", Color.FOXY, 14),
            new Cat("Margo", Color.WHITE, 3),
            new Cat("Brawler", Color.DARK_GREY, 1)
      ));

      owners = List.of(owner1, owner2, owner3, owner4, owner5);
   }
}

mainрд╡рд┐рдзрд┐ рдореЗрдВ рдХреЛрдб рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рд░рд╣рддрд╛ рд╣реИ ред рд╡рд░реНрддрдорд╛рди рдореЗрдВ, рд╣рдо рдкрд╣рд▓реЗ рдЙрд╕ initData()рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдХреНрд▓рдм рдореЗрдВ рдкрд╛рд▓рддреВ рдЬрд╛рдирд╡рд░реЛрдВ рдХреЗ рдорд╛рд▓рд┐рдХреЛрдВ рдХреА рд╕реВрдЪреА рдХреЛ рднрд░рддреА рд╣реИред рдлрд┐рд░ рд╣рдо рдШрдЯрддреЗ рдХреНрд░рдо рдореЗрдВ рдЙрдирдХреА рдЙрдореНрд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЫрд╛рдВрдЯреЗ рдЧрдП рдЕрджрд░рдХ рдмрд┐рд▓реНрд▓рд┐рдпреЛрдВ рдХреЗ рдирд╛рдореЛрдВ рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдЗрдП рдХреЛрдб рджреЗрдЦреЗрдВ рдЬреЛ рдЗрд╕ рдХрд╛рд░реНрдп рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрд╛рд░рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ:

public static void main(String[] args) {
   initData();

   List<String> findNames = new ArrayList<>();
   List<Cat> findCats = new ArrayList<>();
   for (Owner owner : owners) {
      for (Animal pet : owner.getPets()) {
         if (Cat.class.equals(pet.getClass()) && Color.FOXY == pet.getColor()) {
            findCats.add((Cat) pet);
         }
      }
   }

   Collections.sort(findCats, new Comparator<Cat>() {
      public int compare(Cat o1, Cat o2) {
         return o2.getAge() - o1.getAge();
      }
   });

   for (Cat cat : findCats) {
      findNames.add(cat.getName());
   }

   findNames.forEach(System.out::println);
}

рдЕрдм рдЖрдЗрдП рдПрдХ рд╡рд┐рдХрд▓реНрдк рджреЗрдЦреЗрдВ:

public static void main(String[] args) {
   initData();

   final List<String> findNames = owners.stream()
           .flatMap(owner -> owner.getPets().stream())
           .filter(pet -> Cat.class.equals(pet.getClass()))
           .filter(cat -> Color.FOXY == cat.getColor())
           .sorted((o1, o2) -> o2.getAge() - o1.getAge())
           .map(Animal::getName)
           .collect(Collectors.toList());

   findNames.forEach(System.out::println);
}

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдХреЛрдб рдмрд╣реБрдд рдЕрдзрд┐рдХ рдХреЙрдореНрдкреИрдХреНрдЯ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕реНрдЯреНрд░реАрдо рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреА рдкреНрд░рддреНрдпреЗрдХ рдкрдВрдХреНрддрд┐ рдПрдХ рдХреНрд░рд┐рдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рдЕрдВрдЧреНрд░реЗрдЬреА рдореЗрдВ рд╡рд╛рдХреНрдпреЛрдВ рдХреА рддрд░рд╣ рдкрдврд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

.flatMap(owner -> owner.getPets().stream())
рдП рд╕реЗ Stream<Owner>рдП рддрдХ рд▓реЗ рдЬрд╛рдПрдВStream<Pet>
.filter(pet -> Cat.class.equals(pet.getClass()))
рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рдХреЗрд╡рд▓ рдмрд┐рд▓реНрд▓рд┐рдпреЛрдВ рдХреЛ рдмрдирд╛рдП рд░рдЦреЗрдВ
.filter(cat -> Color.FOXY == cat.getColor())
рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рдХреЗрд╡рд▓ рдЬрд┐рдВрдЬрд░ рдХреИрдЯ рдХреЛ рдмрдирд╛рдП рд░рдЦреЗрдВ
.sorted((o1, o2) -> o2.getAge() - o1.getAge())
рдЙрдореНрд░ рдХреЗ рд╣рд┐рд╕рд╛рдм рд╕реЗ рдЕрд╡рд░реЛрд╣реА рдХреНрд░рдо рдореЗрдВ рд▓рдЧрд╛рдПрдВ
.map(Animal::getName)
рдирд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ
.collect(Collectors.toList())
рдкрд░рд┐рдгрд╛рдо рдХреЛ рд╕реВрдЪреА рдореЗрдВ рд░рдЦреЗрдВ

3. рдзрд╛рд░рд╛рдПрдБ рдмрдирд╛рдирд╛

рдХрдХреНрд╖рд╛ StreamрдореЗрдВ рддреАрди рд╡рд┐рдзрд┐рдпрд╛рдБ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдордиреЗ рдЕрднреА рддрдХ рдХрд╡рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред рдЗрди рддреАрди рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдирдП рд╕реВрддреНрд░ рдмрдирд╛рдирд╛ рд╣реИред

Stream<T>.of(T obj)рддрд░реАрдХрд╛

рд╡рд┐рдзрд┐ of()рдПрдХ рдзрд╛рд░рд╛ рдмрдирд╛рддреА рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рддрддреНрд╡ рд╣реЛрддрд╛ рд╣реИред рдЖрдорддреМрд░ рдкрд░ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рддрдм рд╣реЛрддреА рд╣реИ, рдЬрдм рдХреЛрдИ рдлрд╝рдВрдХреНрд╢рди Stream<T>рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рд▓реЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреЗрд╡рд▓ TрдСрдмреНрдЬреЗрдХреНрдЯ рд╣реЛрддрд╛ рд╣реИред рдлрд┐рд░ рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ рдФрд░ рдЖрд╕рд╛рдиреА рд╕реЗ рдПрдХ рддрддреНрд╡ рд╡рд╛рд▓реА рдзрд╛рд░рд╛of() рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ред

рдЙрджрд╛рд╣рд░рдг:

Stream<Integer> stream = Stream.of(1);

Stream<T> Stream.of(T obj1, T obj2, T obj3, ...)рддрд░реАрдХрд╛

рд╡рд┐рдзрд┐ of()рдПрдХ рдзрд╛рд░рд╛ рдмрдирд╛рддреА рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдкрд╛рд░рд┐рдд рддрддреНрд╡ рд╣реЛрддреЗ рд╣реИрдВ ред рдХрд┐рд╕реА рднреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рддрддреНрд╡реЛрдВ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИред рдЙрджрд╛рд╣рд░рдг:

Stream<Integer> stream = Stream.of(1, 2, 3, 4, 5);

Stream<T> Stream.generate(Supplier<T> obj)рддрд░реАрдХрд╛

рд╡рд┐рдзрд┐ generate()рдЖрдкрдХреЛ рдПрдХ рдирд┐рдпрдо рд╕реЗрдЯ рдХрд░рдиреЗ рджреЗрддреА рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдиреБрд░реЛрдз рдХрд┐рдП рдЬрд╛рдиреЗ рдкрд░ рдзрд╛рд░рд╛ рдХреЗ рдЕрдЧрд▓реЗ рддрддреНрд╡ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рд╣рд░ рдмрд╛рд░ рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдВрдЦреНрдпрд╛ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ ред

рдЙрджрд╛рд╣рд░рдг:

Stream<Double> s = Stream.generate(Math::random);

Stream<T> Stream.concat(Stream<T> a, Stream<T> b)рддрд░реАрдХрд╛

рд╡рд┐рдзрд┐ concat()рджреЛ рдкрд╛рд╕ рдХреА рдЧрдИ рдзрд╛рд░рд╛рдУрдВ рдХреЛ рдПрдХ рдореЗрдВ рдЬреЛрдбрд╝рддреА рд╣реИ ред рдЬрдм рдбреЗрдЯрд╛ рдкрдврд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рдкрд╣рд▓реЗ рдкрд╣рд▓реА рд╕реНрдЯреНрд░реАрдо рд╕реЗ рдФрд░ рдлрд┐рд░ рджреВрд╕рд░реА рд╕реНрдЯреНрд░реАрдо рд╕реЗ рдкрдврд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг:

Stream<Integer> stream1 = Stream.of(1, 2, 3, 4, 5);
Stream<Integer> stream2 = Stream.of(10, 11, 12, 13, 14);
Stream<Integer> result = Stream.concat(stream1, stream2);

4. рдбреЗрдЯрд╛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдирд╛

рдЕрдиреНрдп 6 рд╡рд┐рдзрд┐рдпрд╛рдБ рдирдИ рдбреЗрдЯрд╛ рдзрд╛рд░рд╛рдПрдБ рдмрдирд╛рддреА рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рдЖрдк рд╡рд┐рднрд┐рдиреНрди рдЬрдЯрд┐рд▓рддрд╛ рдХреА рд╢реНрд░реГрдВрдЦрд▓рд╛рдУрдВ (рдпрд╛ рдкрд╛рдЗрдкрд▓рд╛рдЗрдиреЛрдВ) рдореЗрдВ рдзрд╛рд░рд╛рдУрдВ рдХреЛ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

Stream<T> filter(Predicate<T>)рддрд░реАрдХрд╛

рдпрд╣ рд╡рд┐рдзрд┐ рдПрдХ рдирдИ рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░реАрдо рд▓реМрдЯрд╛рддреА рд╣реИ рдЬреЛ рдкрд╛рд╕ рдХрд┐рдП рдЧрдП рдирд┐рдпрдо рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╕реНрд░реЛрдд рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░реАрдо рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рддреА рд╣реИ ред рд╡рд┐рдзрд┐ рдХреЛ рдЙрд╕ рд╡рд╕реНрддреБ рдкрд░ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд┐рд╕рдХрд╛ рдкреНрд░рдХрд╛рд░ рд╣реИ редStream<T>

рдЖрдк рд▓реИрдореНрдмреНрдбрд╛ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ рдирд┐рдпрдо рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ , рдЬрд┐рд╕реЗ рд╕рдВрдХрд▓рдХ рдлрд┐рд░ Predicate<T>рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░ рджреЗрдЧрд╛ред

рдЙрджрд╛рд╣рд░рдг:

рдЬрдВрдЬреАрд░ рдзрд╛рд░рд╛рдПрдБ рд╡реНрдпрд╛рдЦреНрдпрд╛
Stream<Integer> stream = Stream.of(1, 2, 3, 4, 5);
Stream<Integer> stream2 = stream.filter(x -> (x < 3));

рдХреЗрд╡рд▓ рддреАрди рд╕реЗ рдХрдо рд╕рдВрдЦреНрдпрд╛рдПрдБ рд░рдЦреЗрдВ
Stream<Integer> stream = Stream.of(1, -2, 3, -4, 5);
Stream<Integer> stream2 = stream.filter(x -> (x > 0));

рд╢реВрдиреНрдп рд╕реЗ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЛ рд╣реА рд░рдЦреЗрдВ

Stream<T> sorted(Comparator<T>)рддрд░реАрдХрд╛

рдпрд╣ рд╡рд┐рдзрд┐ рдПрдХ рдирдИ рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░реАрдо рд▓реМрдЯрд╛рддреА рд╣реИ рдЬреЛ рдбреЗрдЯрд╛ рдХреЛ рд╕реНрд░реЛрдд рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рд╕реЙрд░реНрдЯ рдХрд░рддреА рд╣реИ ред рдЖрдк рдПрдХ рддреБрд▓рдирд┐рддреНрд░ рдореЗрдВ рдкрд╛рд╕ рд╣реЛрддреЗ рд╣реИрдВ , рдЬреЛ рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░реАрдо рдХреЗ рджреЛ рддрддреНрд╡реЛрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдпрдо рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИред

Stream<T> distinct()рддрд░реАрдХрд╛

рдпрд╣ рд╡рд┐рдзрд┐ рдПрдХ рдирдИ рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░реАрдо рд▓реМрдЯрд╛рддреА рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╕реНрд░реЛрдд рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рдХреЗрд╡рд▓ рдЕрджреНрд╡рд┐рддреАрдп рддрддреНрд╡ рд╣реЛрддреЗ рд╣реИрдВ ред рд╕рднреА рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдбреЗрдЯрд╛ рдХреЛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг:

Stream<Integer> stream = Stream.of(1, 2, 3, 4, 5, 2, 2, 2, 3, 4);
Stream<Integer> stream2 = stream.distinct(); // 1, 2, 3, 4, 5

Stream<T> peek(Consumer<T>)рддрд░реАрдХрд╛

рдпрд╣ рд╡рд┐рдзрд┐ рдПрдХ рдирдИ рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░реАрдо рд▓реМрдЯрд╛рддреА рд╣реИ , рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕рдореЗрдВ рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд рд╕реНрдЯреНрд░реАрдо рдХреЗ рд╕рдорд╛рди рд╣реА рд╣реИред рд▓реЗрдХрд┐рди рдЬрдм рд╕реНрдЯреНрд░реАрдо рд╕реЗ рдЕрдЧрд▓реЗ рддрддреНрд╡ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рд╡рд┐рдзрд┐ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд┐рдП рдЧрдП рдлрд╝рдВрдХреНрд╢рди рдХреЛpeek() рдЗрд╕рдХреЗ рд╕рд╛рде рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдпрджрд┐ рдЖрдк рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╡рд┐рдзрд┐ System.out::printlnрдореЗрдВ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ peek(), рддреЛ рд╕рднреА рдСрдмреНрдЬреЗрдХреНрдЯ рддрдм рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрдВрдЧреЗ рдЬрдм рд╡реЗ рд╕реНрдЯреНрд░реАрдо рд╕реЗ рдЧреБрдЬрд░реЗрдВрдЧреЗред

Stream<T> limit(int n)рддрд░реАрдХрд╛

рдпрд╣ рд╡рд┐рдзрд┐ рдПрдХ рдирдИ рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░реАрдо рд▓реМрдЯрд╛рддреА рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╕реНрд░реЛрдд рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рдХреЗрд╡рд▓ рдкрд╣рд▓реЗ nрддрддреНрд╡ рд╢рд╛рдорд┐рд▓ рд╣реЛрддреЗ рд╣реИрдВ ред рдЕрдиреНрдп рд╕рднреА рдбреЗрдЯрд╛ рдХреЛ рдЦрд╛рд░рд┐рдЬ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг:

Stream<Integer> stream = Stream.of(1, 2, 3, 4, 5, 2, 2, 2, 3, 4);
Stream<Integer> stream2 = stream.limit(3); // 1, 2, 3

Stream<T> skip(int n)рддрд░реАрдХрд╛

рдпрд╣ рд╡рд┐рдзрд┐ рдПрдХ рдирдИ рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░реАрдо рд▓реМрдЯрд╛рддреА рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╕реНрд░реЛрдд рд╕реНрдЯреНрд░реАрдо рдХреЗ рд╕рдорд╛рди рд╕рднреА рддрддреНрд╡ рд╣реЛрддреЗ рд╣реИрдВ , рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ рддрддреНрд╡реЛрдВ рдХреЛ рдЫреЛрдбрд╝ рджреЗрддреЗ рд╣реИрдВ (рдЕрдирджреЗрдЦрд╛ рдХрд░рддреЗ рд╣реИрдВ)ред nрдЙрджрд╛рд╣рд░рдг:

Stream<Integer> stream = Stream.of(1, 2, 3, 4, 5, 2, 2, 2, 3, 4);
Stream<Integer> stream2 = stream.skip(3); // 4, 5, 2, 2, 2, 3, 4

4
рдЯрд╛рд╕реНрдХ
Java Core,  рд╕реНрддрд░ 6рд╕рдмрдХ 3
рд▓реЙрдХ
My first thread
The grand moment arrived at last! Brace yourself: you have to create your very own thread. Create a public static TestThread class, a thread with the Runnable interface.
4
рдЯрд╛рд╕реНрдХ
Java Core,  рд╕реНрддрд░ 6рд╕рдмрдХ 3
рд▓реЙрдХ
My second thread
Let's continue to unravel threads. This time, we need to create a public static TestThread class that inherits the Thread class. Then we'll create a static block inside TestThread, which will display "This is the static block inside TestThread". And the run method should display "This is the run method".
9
рдЯрд╛рд╕реНрдХ
Java Core,  рд╕реНрддрд░ 6рд╕рдмрдХ 3
рд▓реЙрдХ
A list and some threads
Let's multiply threads again and again. In the main method, add five threads to the static list. Each thread must be a new Thread object that works with its own SpecialThread object. The SpecialThread class's run method should display "This is the run method inside SpecialThread".