рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рдПрдХ Oracle рдмреНрд▓реЙрдЧ рдкрд░, рдмреНрд░рд╛рдпрди рдЧреЛрдПрдЯреНрдЬрд╝ рдиреЗ рдЬрд╛рд╡рд╛ рдПрд╕рдИ 8 рдореЗрдВ рд▓реИрдВрдЧреНрд╡реЗрдЬ / рд▓рд╛рдЗрдмреНрд░реЗрд░реА / рд╡реАрдПрдо рдХреЛ-рдЗрд╡реЛрд▓реНрдпреВрд╢рди рдкрд░ рдбреЗрд╡реЛрдХреНрд╕рдПрдХреНрд╕ рдЯреЙрдХ рдХреЗ рд╕рд╛рде рдПрдХ рдкреНрд░реЗрдЬреЗрдВрдЯреЗрд╢рди рдХрд╛
рд▓рд┐рдВрдХ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ред
рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдЙрди рдЖрда рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛, рдЬрд┐рдиреНрд╣реЗрдВ рдЖрда рдореЗрдВ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рд╕рд╛рде рд╣реА рдЙрдиреНрд╣реЗрдВ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ, рдЬреЛ рдУрд░реЗрдХрд▓ рджреНрд╡рд╛рд░рд╛ рдЪреБрдиреЗ рдЧрдП рдереЗред рдЕрдиреНрдп рдкрд╣рд▓реБрдУрдВ рдХреЛ рдореВрд▓ рдореЗрдВ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдкрд░ рдкрдврд╝реЗрдВ:
рдореМрдЬреВрджрд╛ рдкрд┐рдЫрдбрд╝реЗ рд╕рдВрдЧрдд рдПрдкреАрдЖрдИ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░;
рдЬрд╛рд╡рд╛ рдФрд░ рднреА рдСрдмреНрдЬреЗрдХреНрдЯ рдУрд░рд┐рдПрдВрдЯреЗрдб рд╣реЛрддрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ;
рдЬрд╛рд╡рд╛ рдореЗрдВ рд▓реИрдореНрдмреНрдбрд╛ рднрд╛рд╡;
рд╕реНрдЯреНрд░реАрдорд▓рд╛рдЗрдирд┐рдВрдЧ рдорд▓реНрдЯреАрдереНрд░реЗрдбрд┐рдВрдЧред
рддреЛ рдУрд░реЗрдХрд▓ рдХреНрдпрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ:
I. рдореМрдЬреВрджрд╛ рдкрд┐рдЫрдбрд╝реЗ рд╕рдВрдЧрдд рдПрдкреАрдЖрдИ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ред
рд╕рднреА javists рдХреЗ рдЬреАрд╡рди рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, JDK рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ / рдкреВрд░рдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рд╛рде рд╣реА рд╕рд╛рде рд╕рднреА рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП (рдореМрдЬреВрджрд╛ рдЪреМрдЦрдЯреЗ рд╕рд╣рд┐рдд) рдЕрдкрдиреЗ APIs рдХреЛ рдкреВрд░рдХ рдмрдирд╛рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдПрдХ рд╢рд░реНрдд рд╡рд┐рд░рд╛рд╕рдд-рд╕рдВрд╣рд┐рддрд╛ рдХрд╛ рд╕рдВрд░рдХреНрд╖рдг рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП, Oracle рдХреЗ рд▓реЛрдЧреЛрдВ рдиреЗ рд╡рд░реНрдЪреБрдЕрд▓ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдмрдирд╛рдпрд╛ред
рд╡рд░реНрдЪреБрдЕрд▓ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╡рд┐рдзрд┐рдпрд╛рдБ рд╡реЗ рд╡рд┐рдзрд┐рдпрд╛рдБ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдореМрдЬреВрджрд╛ рдЗрдВрдЯрд░рдлреЗрд╕ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЗрди рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдПрдХ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд░реНрдЧреЛрдВ рдХреЛ рдкреБрдирд░реНрд╕рдВрдпреЛрдЬрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдЧреА рдФрд░ рд╡реЗ рдкрд╣рд▓реЗ рдХреА рддрд░рд╣ рдХрд╛рдо рдХрд░реЗрдВрдЧреЗред рд╣рдореЗрдВ рдПрдХ рдУрд░ рдореМрдЬреВрджрд╛ рдПрдкреАрдЖрдИ рдХреЗ рд╕реНрд╡рд╛рд╕реНрдереНрдп рдХрд╛ рд╕рдВрд░рдХреНрд╖рдг рдФрд░ рджреВрд╕рд░реА рдУрд░ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдорд┐рд▓рддреА рд╣реИред
рдПрдХ рдЙрджрд╛рд╣рд░рдг Iterator рдФрд░ UnsupportedOperationException рд╣реИред
Iterator рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреА рдирд┐рд╖реНрдХрд╛рд╕рди рд╡рд┐рдзрд┐ рд╣рдо рд╕рднреА рдЬрд╛рдирддреЗ рд╣реИрдВред Javadoc рдХрд╛ рдХрд╣рдирд╛ рд╣реИ рдХрд┐ рдпрджрд┐ рдкреБрдирд░рд╛рд╡реГрддреНрдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдирд┐рд╖реНрдХрд╛рд╕рди рд╡рд┐рдзрд┐ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рддреЛ рд╡рд╣ UnsupportedOperationException рдХреЛ рдлреЗрдВрдХ рд╕рдХрддрд╛ рд╣реИред рд╕рд╣рдордд, рдХреБрдЯрд┐рд▓ред рдпрджрд┐ рдореИрдВ рдПрдХ рд╡рд┐рдзрд┐ рдХреЛ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВ, рддреЛ рдореБрдЭреЗ рдЗрд╕реЗ рдХреНрдпреЛрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдПрдХ рдЕрдкрд╡рд╛рдж рдХреНрдпреЛрдВ рдлреЗрдВрдХрдирд╛ рдЪрд╛рд╣рд┐рдП?
рд╕рдорд╛рдзрд╛рди:
interface Iterator<T> { boolean hasNext(); T next(); void remove() default { throw new UnsupportedOperationException(); }; }
рдпрд╣ рдирд┐рд╖реНрдХрд╛рд╕рди рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрдХреНрд╖рд╛рдПрдВ рдЕрдм рдЗрд╕ рдкрджреНрдзрддрд┐ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИрдВред
рдПрдХ рдЙрджрд╛рд╣рд░рдг рдПрдХ рд╕реВрдЪреА рд╕реЗ рдЕрдзрд┐рдХ рдЪрд▓рдиреЗ рд╡рд╛рд▓рд╛ рд╣реИред
рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдПрдХ рдХреЛрдб рд╣реИ рдЬреЛ 2011 рдореЗрдВ рдЫрд╛рддреНрд░реЛрдВ рдХреЗ рдмреАрдЪ рдЙрдЪреНрдЪрддрдо рд╕реНрдХреЛрд░ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ:
List<Student> students = ... double highestScore = 0.0; for (Student s: students) { if (s.getGradYear() == 2011) { if (s.getScore() > highestScore) { highestScore = s.score; } } }
рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ, рдПрдХ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдХреЛрдбред рд▓реЗрдХрд┐рди рдпрд╣ рдСрдмреНрдЬреЗрдХреНрдЯ рдУрд░рд┐рдПрдВрдЯреЗрдб рдирд╣реАрдВ рд╣реИред рдЗрд╕ рд╕реВрдЪреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЧреНрд░рд╛рд╣рдХ рдХреЛрдб рдореЗрдВ рд╕реВрдЪреА рдХрд╛ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рд╕реНрд╡рдпрдВ 'рдлреЙрд░' рд▓реВрдк рдореЗрдВ рд╣реЛрддрд╛ рд╣реИред рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдСрдмреНрдЬреЗрдХреНрдЯ-рдУрд░рд┐рдПрдВрдЯреЗрдб рджреГрд╖реНрдЯрд┐рдХреЛрдг рдФрд░ "рдЖрдВрддрд░рд┐рдХ" рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕ рдХреЛрдб рдХреЛ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рд╡рд░реНрдЪреБрдЕрд▓ рддрд░реАрдХреЗ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВред
SomeCoolList<Student> students = ... double highestScore = students.filter(new Predicate<Student>() { public boolean op(Student s) { return s.getGradYear() == 2011; } }).map(new Mapper<Student, Double>() { public Double extract(Student s) { return s.getScore(); } }).max();
рдпрд╣рд╛рдБ рдкрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХреБрдЫ рдкреБрдирд░рд╛рд╡реГрддрд┐ SomeCoolList рд╡рд░реНрдЧ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдорд╛рдирдирд╛ тАЛтАЛрдЪрд╛рд╣рд┐рдП, рдпрд╣ рдмрд╣реБрдд рд╣реА рдмреЛрдЭрд┐рд▓ рдФрд░ рд╡рд╛рдЪрд╛рд▓ рд╣реИред рдФрд░ рдпрд╣рд╛рдБ рд▓реИрдореНрдмреНрдбрд╛ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдмрдЪрд╛рд╡ рдХреЗ рд▓рд┐рдП рдЖрддрд╛ рд╣реИред
рд╕рдорд╛рдзрд╛рди:
SomeCoolList<Student> students = ... double highestScore = students.filter(Student s -> s.getGradYear() == 2011) .map(Student s -> s.getScore()) .max();
рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдПрдХ рдФрд░ рдлрд╛рдпрджрд╛ рд╣реИ - рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рд╕рдорд╛рдирд╛рдВрддрд░ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕рдВрдЧреНрд░рд╣ рд╕реНрд╡рдпрдВ рд╕рдВрдЧреНрд░рд╣ рд╕реЗ рдЧреБрдЬрд░рддрд╛ рд╣реИред
рджреНрд╡рд┐рддреАрдпред рд╕рд░рд▓реАрдХрд░рдг рд╕рд░рд▓реАрдХрд░рдг
рдЪреВрдВрдХрд┐ рдЕрдм рдорд▓реНрдЯреА-рдХреЛрд░ рдкреНрд░реЛрд╕реЗрд╕рд░ рд╡рд╛рд▓реЗ рдХрдВрдкреНрдпреВрдЯрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЖрджрд░реНрд╢ рдмрди рдЧрдП рд╣реИрдВ, рддреЛ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдпрд╣ рдЗрди рдмрд╣реБрдд рдЧреБрдард▓реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддред рдорд▓реНрдЯреАрдереНрд░реЗрдбреЗрдб рдкреНрд░реЛрдЧреНрд░рд╛рдо рд▓рд┐рдЦреЗрдВред рдЗрд╕рд▓рд┐рдП, JDK 8 рдореЗрдВ рдЕрдЧрд▓рд╛ рд╕реБрдзрд╛рд░ рд╕рдВрдЧрд╛рдорд┐рддрд┐ рдХрд╛ рд╕рд░рд▓реАрдХрд░рдг рд╣реИред
рдХреЗрд╡рд▓ рдорд▓реНрдЯреАрдереНрд░реЗрдбрд┐рдВрдЧ рдФрд░ рд╡рд░реНрдЪреБрдЕрд▓ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдКрдкрд░ рджрд┐рдП рдЧрдП рдХреЛрдб рдХреЛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
SomeCoolList<Student> students = ... double highestScore = students.parallel() .filter(Student s -> s.getGradYear() == 2011) .map(Student s -> s.getScore()) .max();
рдЗрд╕ рдкрд░, рдЖрда рдореБрдЦреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рдореБрдЦреНрдп рд╣реИрдВред
рдореИрдВ рдЖрдкрдХреЛ рдпрд╣ рднреА рдпрд╛рдж рджрд┐рд▓рд╛рддрд╛ рд╣реВрдВ рдХрд┐ рдЖрдк рд▓реИрдореНрдмреНрдбрд╛ рд╕рдкреЛрд░реНрдЯ рдХреЗ рд╕рд╛рде JDK рд╕реНрдЯреИрдВрдбрд░реНрдб рдПрдбрд┐рд╢рди 8 рдбреЗрд╡рд▓рдкрд░ рдкреНрд░реАрд╡реНрдпреВ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ
рд╣реИрдВ ред