JavaRush /ื‘ืœื•ื’ Java /Random-HE /ืžื“ืจื™ืš Java 8. 1 ื—ืœืง.
ramhead
ืจึธืžึธื”

ืžื“ืจื™ืš Java 8. 1 ื—ืœืง.

ืคื•ืจืกื ื‘ืงื‘ื•ืฆื”

"ื’'ืื•ื•ื” ืขื“ื™ื™ืŸ ื—ื™ื” - ื•ืื ืฉื™ื ืžืชื—ื™ืœื™ื ืœื”ื‘ื™ืŸ ืืช ื–ื”".

ื‘ืจื•ื›ื™ื ื”ื‘ืื™ื ืœืžื‘ื•ื ืฉืœื™ ืœ-Java 8. ืžื“ืจื™ืš ื–ื” ื™ืขื‘ื™ืจ ืืชื›ื ืฆืขื“ ืื—ืจ ืฆืขื“ ื“ืจืš ื›ืœ ื”ืชื›ื•ื ื•ืช ื”ื—ื“ืฉื•ืช ืฉืœ ื”ืฉืคื”. ื‘ืืžืฆืขื•ืช ื“ื•ื’ืžืื•ืช ืงื•ื“ ืงืฆืจื•ืช ื•ืคืฉื•ื˜ื•ืช, ืชืœืžื“ ื›ื™ืฆื“ ืœื”ืฉืชืžืฉ ื‘ืฉื™ื˜ื•ืช ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ืฉืœ ืžืžืฉืง , ื‘ื™ื˜ื•ื™ื™ ืœืžื‘ื“ื” , ืฉื™ื˜ื•ืช ื”ืชื™ื™ื—ืกื•ืช ื•ื”ืขืจื•ืช ื”ื ื™ืชื ื•ืช ืœื—ื–ืจื” . ืขื“ ืกื•ืฃ ื”ืžืืžืจ, ืชื›ื™ืจื• ืืช ื”ืฉื™ื ื•ื™ื™ื ื”ืื—ืจื•ื ื™ื ื‘ืžืžืฉืงื™ API ื›ื’ื•ืŸ ื–ืจืžื™ื, ืžืžืฉืงื™ ืคื•ื ืงืฆื™ื•ืช, ื”ืจื—ื‘ื•ืช ืฉื™ื•ืš ื•-Date API ื”ื—ื“ืฉ. ื‘ืœื™ ืงื™ืจื•ืช ืฉืœ ื˜ืงืกื˜ ืžืฉืขืžื - ืจืง ื—ื‘ื•ืจื” ืฉืœ ืงื˜ืขื™ ืงื•ื“ ืขื ื”ืขืจื•ืช. ืชื”ื ื”!

ืฉื™ื˜ื•ืช ื‘ืจื™ืจืช ืžื—ื“ืœ ืขื‘ื•ืจ ืžืžืฉืงื™ื

Java 8 ืžืืคืฉืจืช ืœื ื• ืœื”ื•ืกื™ืฃ ืฉื™ื˜ื•ืช ืœื ืžื•ืคืฉื˜ื•ืช ื”ืžื™ื•ืฉืžื•ืช ื‘ืžืžืฉืง ื‘ืืžืฆืขื•ืช ืฉื™ืžื•ืฉ ื‘ืžื™ืœืช ื”ืžืคืชื— ื”ืžื•ื’ื“ืจืช ื›ื‘ืจื™ืจืช ืžื—ื“ืœ . ืชื›ื•ื ื” ื–ื• ื™ื“ื•ืขื” ื’ื ื‘ืฉื ืฉื™ื˜ื•ืช ื”ืจื—ื‘ื” . ื”ื ื” ื”ื“ื•ื’ืžื” ื”ืจืืฉื•ื ื” ืฉืœื ื•: interface Formula { double calculate(int a); default double sqrt(int a) { return Math.sqrt(a); } } ื‘ื ื•ืกืฃ ืœืฉื™ื˜ื” ื”ืžื•ืคืฉื˜ืช calculate , ืžืžืฉืง ื”ืคื•ืจืžื•ืœื” ืžื’ื“ื™ืจ ื’ื ืฉื™ื˜ืช ื‘ืจื™ืจืช ืžื—ื“ืœ sqrt . ืžื—ืœืงื•ืช ื”ืžื™ื™ืฉืžื•ืช ืืช ืžืžืฉืง ื”ื ื•ืกื—ื” ืžื™ื™ืฉืžื•ืช ืจืง ืืช ืฉื™ื˜ืช ื”ื—ื™ืฉื•ื‘ ื”ืžื•ืคืฉื˜ืช . ื ื™ืชืŸ ืœื”ืฉืชืžืฉ ื‘ืฉื™ื˜ืช ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ืฉืœ sqrt ื™ืฉื™ืจื•ืช ืžื”ืงื•ืคืกื”. Formula formula = new Formula() { @Override public double calculate(int a) { return sqrt(a * 100); } }; formula.calculate(100); // 100.0 formula.sqrt(16); // 4.0 ืื•ื‘ื™ื™ืงื˜ ื”ื ื•ืกื—ื” ืžื™ื•ืฉื ื›ืื•ื‘ื™ื™ืงื˜ ืื ื•ื ื™ืžื™. ื”ืงื•ื“ ื“ื™ ืžืจืฉื™ื: 6 ืฉื•ืจื•ืช ืงื•ื“ ืคืฉื•ื˜ ืœื—ืฉื‘ sqrt(a * 100) . ื›ืคื™ ืฉื ืจืื” ื‘ืกืขื™ืฃ ื”ื‘ื, ื™ืฉ ื“ืจืš ืื˜ืจืงื˜ื™ื‘ื™ืช ื™ื•ืชืจ ืœื™ื™ืฉื ืื•ื‘ื™ื™ืงื˜ื™ื ืฉืœ ืฉื™ื˜ื” ื‘ื•ื“ื“ืช ื‘-Java 8.

ื‘ื™ื˜ื•ื™ื™ ืœืžื“ื”

ื ืชื—ื™ืœ ืขื ื“ื•ื’ืžื” ืคืฉื•ื˜ื” ื›ื™ืฆื“ ืœืžื™ื™ืŸ ืžืขืจืš ืฉืœ ืžื—ืจื•ื–ื•ืช ื‘ื’ืจืกืื•ืช ืžื•ืงื“ืžื•ืช ืฉืœ Java: ืฉื™ื˜ืช ื”ืขื–ืจ ื”ืกื˜ื˜ื™ืกื˜ื™ืช Collections.sort ืœื•ืงื—ืช ืจืฉื™ืžื” ื•-Comparator ื›ื“ื™ ืœืžื™ื™ืŸ ืืช ื”ืืœืžื ื˜ื™ื ืฉืœ ื”ืจืฉื™ืžื” ื”ื ืชื•ื ื”. ืžื” ืฉืงื•ืจื” ืœืขืชื™ื ืงืจื•ื‘ื•ืช ื”ื•ื ืฉืืชื” ื™ื•ืฆืจ ื”ืฉื•ื•ืื•ืช ืื ื•ื ื™ืžื™ื•ืช ื•ืžืขื‘ื™ืจ ืื•ืชื ืœืฉื™ื˜ื•ืช ืžื™ื•ืŸ. ื‘ืžืงื•ื ืœื™ืฆื•ืจ ืื•ื‘ื™ื™ืงื˜ื™ื ืื ื•ื ื™ืžื™ื™ื ื›ืœ ื”ื–ืžืŸ, Java 8 ื ื•ืชืŸ ืœืš ืืช ื”ื™ื›ื•ืœืช ืœื”ืฉืชืžืฉ ื‘ื”ืจื‘ื” ืคื—ื•ืช ืชื—ื‘ื™ืจ, ื‘ื™ื˜ื•ื™ื™ ืœืžื‘ื“ื” : ื›ืคื™ ืฉืืชื” ื™ื›ื•ืœ ืœืจืื•ืช, ื”ืงื•ื“ ื”ืจื‘ื” ื™ื•ืชืจ ืงืฆืจ ื•ืงืœ ื™ื•ืชืจ ืœืงืจื™ืื”. ืื‘ืœ ื›ืืŸ ื–ื” ื ื”ื™ื” ืขื•ื“ ื™ื•ืชืจ ืงืฆืจ: ื‘ืฉื™ื˜ื” ืฉืœ โ€‹โ€‹ืฉื•ืจื” ืื—ืช, ืืชื” ื™ื›ื•ืœ ืœื”ื™ืคื˜ืจ ืžื”ืกื•ื’ืจื™ื ื”ืžืชื•ืœืชืœื™ื {} ื•ืžื™ืœืช ื”ืžืคืชื— ื”ื—ื–ืจื” . ืื‘ืœ ื›ืืŸ ื”ืงื•ื“ ืžืชืงืฆืจ ืขื•ื“ ื™ื•ืชืจ: ืžื”ื“ืจ ื’'ืื•ื•ื” ืžื•ื“ืข ืœืกื•ื’ื™ ื”ืคืจืžื˜ืจื™ื, ื›ืš ืฉืืชื” ื™ื›ื•ืœ ื’ื ืœื”ืฉืื™ืจ ืื•ืชื ื‘ื—ื•ืฅ. ืขื›ืฉื™ื• ื‘ื•ืื• ื ืฆืœื•ืœ ืœืขื•ืžืง ื›ื™ืฆื“ ื ื™ืชืŸ ืœื”ืฉืชืžืฉ ื‘ื‘ื™ื˜ื•ื™ื™ ืœืžื‘ื“ื” ื‘ื—ื™ื™ื ื”ืืžื™ืชื™ื™ื. List names = Arrays.asList("peter", "anna", "mike", "xenia"); Collections.sort(names, new Comparator () { @Override public int compare(String a, String b) { return b.compareTo(a); } }); Collections.sort(names, (String a, String b) -> { return b.compareTo(a); }); Collections.sort(names, (String a, String b) -> b.compareTo(a)); Collections.sort(names, (a, b) -> b.compareTo(a));

ืžืžืฉืงื™ื ืคื•ื ืงืฆื™ื•ื ืœื™ื™ื

ื›ื™ืฆื“ ื‘ื™ื˜ื•ื™ื™ ืœืžื‘ื“ื” ืžืชืื™ืžื™ื ืœืžืขืจื›ืช ืžืกื•ื’ Java? ื›ืœ ืœืžื‘ื“ื” ืžืชืื™ืžื” ืœืกื•ื’ ื ืชื•ืŸ ื”ืžื•ื’ื“ืจ ืขืœ ื™ื“ื™ ืžืžืฉืง. ื•ื”ืžืžืฉืง ื”ืคื•ื ืงืฆื™ื•ื ืœื™ ื›ื‘ื™ื›ื•ืœ ื—ื™ื™ื‘ ืœื”ื›ื™ืœ ื‘ื“ื™ื•ืง ืฉื™ื˜ื” ืžื•ืคืฉื˜ืช ืื—ืช ืžื•ืฆื”ืจืช. ื›ืœ ื‘ื™ื˜ื•ื™ ืœืžื‘ื“ื” ืžืกื•ื’ ื ืชื•ืŸ ื™ืชืื™ื ืœืฉื™ื˜ื” ืžื•ืคืฉื˜ืช ื–ื•. ืžื›ื™ื•ื•ืŸ ืฉืฉื™ื˜ื•ืช ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ืื™ื ืŸ ืฉื™ื˜ื•ืช ืžื•ืคืฉื˜ื•ืช, ืืชื” ื—ื•ืคืฉื™ ืœื”ื•ืกื™ืฃ ืฉื™ื˜ื•ืช ื‘ืจื™ืจืช ืžื—ื“ืœ ืœืžืžืฉืง ื”ืคื•ื ืงืฆื™ื•ื ืœื™ ืฉืœืš. ืื ื• ื™ื›ื•ืœื™ื ืœื”ืฉืชืžืฉ ื‘ืžืžืฉืง ืฉืจื™ืจื•ืชื™ ื›ื‘ื™ื˜ื•ื™ ืœืžื‘ื“ื”, ื‘ืชื ืื™ ืฉื”ืžืžืฉืง ืžื›ื™ืœ ืจืง ืฉื™ื˜ื” ืžื•ืคืฉื˜ืช ืื—ืช. ื›ื“ื™ ืœื”ื‘ื˜ื™ื— ืฉื”ืžืžืฉืง ืฉืœืš ืขื•ืžื“ ื‘ืชื ืื™ื ืืœื”, ืขืœื™ืš ืœื”ื•ืกื™ืฃ ืืช ื”ื”ืขืจื” @FunctionalInterface . ื”ืžื”ื“ืจ ื™ืงื‘ืœ ืžื™ื“ืข ืขืœ ื™ื“ื™ ื‘ื™ืื•ืจ ื–ื” ืฉื”ืžืžืฉืง ื—ื™ื™ื‘ ืœื”ื›ื™ืœ ืจืง ืฉื™ื˜ื” ืื—ืช, ื•ืื ื”ื•ื ื™ืชืงืœ ื‘ืฉื™ื˜ื” ืžื•ืคืฉื˜ืช ืฉื ื™ื™ื” ื‘ืžืžืฉืง ื–ื”, ื”ื•ื ื™ื–ืจื•ืง ืฉื’ื™ืื”. ื“ื•ื’ืžื”: ื–ื›ื•ืจ ืฉืงื•ื“ ื–ื” ื™ื”ื™ื” ื—ื•ืงื™ ื’ื ืื ื”ื”ืขืจื” @FunctionalInterface ืœื ื”ื•ื›ืจื–ื”. @FunctionalInterface interface Converter { T convert(F from); } Converter converter = (from) -> Integer.valueOf(from); Integer converted = converter.convert("123"); System.out.println(converted); // 123

ื”ืคื ื™ื•ืช ืœืฉื™ื˜ื•ืช ื•ื‘ื ืื™ื

ื ื™ืชืŸ ืœืคืฉื˜ ืขื•ื“ ื™ื•ืชืจ ืืช ื”ื“ื•ื’ืžื” ืฉืœืžืขืœื” ืขืœ ื™ื“ื™ ืฉื™ืžื•ืฉ ื‘ื”ืคื ื™ื” ืœืฉื™ื˜ื” ืกื˜ื˜ื™ืกื˜ื™ืช: Java 8 ืžืืคืฉืจืช ืœืš ืœื”ืขื‘ื™ืจ ื”ืคื ื™ื•ืช ืœืฉื™ื˜ื•ืช ื•ืœื‘ื ืื™ื ื‘ืืžืฆืขื•ืช :: ืกืžืœื™ ืžื™ืœืช ื”ืžืคืชื— . ื”ื“ื•ื’ืžื” ืœืขื™ืœ ืžืจืื” ื›ื™ืฆื“ ื ื™ืชืŸ ืœื”ืฉืชืžืฉ ื‘ืฉื™ื˜ื•ืช ืกื˜ื˜ื™ืกื˜ื™ื•ืช. ืื‘ืœ ืื ื—ื ื• ื™ื›ื•ืœื™ื ื’ื ืœื”ืชื™ื™ื—ืก ืœืฉื™ื˜ื•ืช ืขืœ ืื•ื‘ื™ื™ืงื˜ื™ื: ื‘ื•ืื• ื ืกืชื›ืœ ื›ื™ืฆื“ ื”ืฉื™ืžื•ืฉ ื‘-: ืขื•ื‘ื“ ืขื‘ื•ืจ ื‘ื ืื™ื. ืจืืฉื™ืช, ื”ื‘ื” ื ื’ื“ื™ืจ ื“ื•ื’ืžื” ืขื ื‘ื ืื™ื ืฉื•ื ื™ื: ืœืื—ืจ ืžื›ืŸ, ื ื’ื“ื™ืจ ืืช ืžืžืฉืง ื”ืžืคืขืœ ืฉืœ PersonFactory ืœื™ืฆื™ืจืช ืื•ื‘ื™ื™ืงื˜ื™ ืื“ื ื—ื“ืฉื™ื : Converter converter = Integer::valueOf; Integer converted = converter.convert("123"); System.out.println(converted); // 123 class Something { String startsWith(String s) { return String.valueOf(s.charAt(0)); } } Something something = new Something(); Converter converter = something::startsWith; String converted = converter.convert("Java"); System.out.println(converted); // "J" class Person { String firstName; String lastName; Person() {} Person(String firstName, String lastName) { this.firstName = firstName; this.lastName = lastName; } } interface PersonFactory

{ P create(String firstName, String lastName); } ื‘ืžืงื•ื ืœื™ื™ืฉื ืืช ื”ืžืคืขืœ ื‘ืื•ืคืŸ ื™ื“ื ื™, ืื ื• ืงื•ืฉืจื™ื ื”ื›ืœ ื™ื—ื“ ื‘ืืžืฆืขื•ืช ื”ืคื ื™ื” ืฉืœ ืงื•ื ืกื˜ืจื•ืงื˜ื•ืจ: ืื ื• ื™ื•ืฆืจื™ื ื”ืคื ื™ื” ืœื‘ื ืื™ ืฉืœ ื”ืžื—ืœืงื” Person ื‘ืืžืฆืขื•ืช Person::new . ืžื”ื“ืจ Java ื™ืงืจื ืื•ื˜ื•ืžื˜ื™ืช ืœื‘ื ืื™ ื”ืžืชืื™ื ืขืœ ื™ื“ื™ ื”ืฉื•ื•ืืช ื”ื—ืชื™ืžื” ืฉืœ ื”ื‘ื ืื™ื ืขื ื”ื—ืชื™ืžื” ืฉืœ ืฉื™ื˜ืช PersonFactory.create . PersonFactory personFactory = Person::new; Person person = personFactory.create("Peter", "Parker");

ืื–ื•ืจ ืœืžื“ื”

ืืจื’ื•ืŸ ื’ื™ืฉื” ืœืžืฉืชื ื™ ื”ื™ืงืฃ ื—ื™ืฆื•ื ื™ ืžื‘ื™ื˜ื•ื™ื™ ืœืžื‘ื“ื” ื“ื•ืžื” ืœื’ื™ืฉื” ืžืื•ื‘ื™ื™ืงื˜ ืื ื•ื ื™ืžื™. ืืชื” ื™ื›ื•ืœ ืœื’ืฉืช ืœืžืฉืชื ื™ื ืกื•ืคื™ื™ื ืžื”ื”ื™ืงืฃ ื”ืžืงื•ืžื™, ื›ืžื• ื’ื ืœืฉื“ื•ืช ืžื•ืคืขื™ื ื•ืžืฉืชื ื™ื ืžืฆื˜ื‘ืจื™ื.
ื’ื™ืฉื” ืœืžืฉืชื ื™ื ืžืงื•ืžื™ื™ื
ืื ื• ื™ื›ื•ืœื™ื ืœืงืจื•ื ืžืฉืชื ื” ืžืงื•ืžื™ ืขื ื”ืฉื™ื ื•ื™ ื”ืกื•ืคื™ ืžืชื•ืš ื”ื”ื™ืงืฃ ืฉืœ ื‘ื™ื˜ื•ื™ ืœืžื‘ื“ื”: ืื‘ืœ ื‘ื ื™ื’ื•ื“ ืœืื•ื‘ื™ื™ืงื˜ื™ื ืื ื•ื ื™ืžื™ื™ื, ืื™ืŸ ืฆื•ืจืš ืœื”ื›ืจื™ื– ืขืœ ืžืฉืชื ื™ื ื›ืกื•ืคื™ื™ื ื›ื“ื™ ืœื”ื™ื•ืช ื ื’ื™ืฉื™ื ืžื‘ื™ื˜ื•ื™ ืœืžื‘ื“ื” . ื’ื ื”ืงื•ื“ ื”ื–ื” ื ื›ื•ืŸ: ืขื ื–ืืช, ื”ืžืฉืชื ื” num ื—ื™ื™ื‘ ืœื”ื™ืฉืืจ ื‘ืœืชื™ ื ื™ืชืŸ ืœืฉื™ื ื•ื™, ื›ืœื•ืžืจ. ืœื”ื™ื•ืช ืกื•ืคื™ ืžืจื•ืžื– ืขื‘ื•ืจ ื”ื™ื“ื•ืจ ืงื•ื“. ื”ืงื•ื“ ื”ื‘ื ืœื ื™ืงืžืคืœ: ืฉื™ื ื•ื™ื™ื ื‘-num ื‘ืชื•ืš ื‘ื™ื˜ื•ื™ ืœืžื‘ื“ื” ื’ื ืื™ื ื ืžื•ืชืจื™ื. final int num = 1; Converter stringConverter = (from) -> String.valueOf(from + num); stringConverter.convert(2); // 3 int num = 1; Converter stringConverter = (from) -> String.valueOf(from + num); stringConverter.convert(2); // 3 int num = 1; Converter stringConverter = (from) -> String.valueOf(from + num); num = 3;
ื’ื™ืฉื” ืœืฉื“ื•ืช ืžื•ืคืข ื•ืžืฉืชื ื™ื ืกื˜ื˜ื™ืกื˜ื™ื™ื
ื‘ื ื™ื’ื•ื“ ืœืžืฉืชื ื™ื ืžืงื•ืžื™ื™ื, ืื ื• ื™ื›ื•ืœื™ื ืœืงืจื•ื ื•ืœืฉื ื•ืช ืฉื“ื•ืช ืžื•ืคืขื™ื ื•ืžืฉืชื ื™ื ืกื˜ื˜ื™ืกื˜ื™ื™ื ื‘ืชื•ืš ื‘ื™ื˜ื•ื™ื™ ืœืžื‘ื“ื”. ืื ื• ืžื›ื™ืจื™ื ืืช ื”ื”ืชื ื”ื’ื•ืช ื”ื–ื• ืžื—ืคืฆื™ื ืื ื•ื ื™ืžื™ื™ื. class Lambda4 { static int outerStaticNum; int outerNum; void testScopes() { Converter stringConverter1 = (from) -> { outerNum = 23; return String.valueOf(from); }; Converter stringConverter2 = (from) -> { outerStaticNum = 72; return String.valueOf(from); }; } }
ื’ื™ืฉื” ืœืฉื™ื˜ื•ืช ื‘ืจื™ืจืช ืžื—ื“ืœ ืฉืœ ืžืžืฉืงื™ื
ื–ื•ื›ืจื™ื ืืช ื”ื“ื•ื’ืžื” ืขื ืžื•ืคืข ื”ื ื•ืกื—ื” ืžื”ืกืขื™ืฃ ื”ืจืืฉื•ืŸ? ืžืžืฉืง ื”ืคื•ืจืžื•ืœื” ืžื’ื“ื™ืจ ืฉื™ื˜ืช ื‘ืจื™ืจืช ืžื—ื“ืœ sqrt ืฉื ื™ืชืŸ ืœื’ืฉืช ืืœื™ื” ืžื›ืœ ืžื•ืคืข ืฉืœ ื ื•ืกื—ื” , ื›ื•ืœืœ ืื•ื‘ื™ื™ืงื˜ื™ื ืื ื•ื ื™ืžื™ื™ื. ื–ื” ืœื ืขื•ื‘ื“ ืขื ื‘ื™ื˜ื•ื™ื™ ืœืžื‘ื“ื”. ืœื ื ื™ืชืŸ ืœื’ืฉืช ืœืฉื™ื˜ื•ืช ื‘ืจื™ืจืช ืžื—ื“ืœ ื‘ืชื•ืš ื‘ื™ื˜ื•ื™ื™ lambda. ื”ืงื•ื“ ื”ื‘ื ืื™ื ื• ืงื•ืžืคื™ืœืฆื™ื”: Formula formula = (a) -> sqrt( a * 100);

ืžืžืฉืงื™ื ืคื•ื ืงืฆื™ื•ื ืœื™ื™ื ืžื•ื‘ื ื™ื

ื”-API ืฉืœ JDK 1.8 ืžื›ื™ืœ ืžืžืฉืงื™ื ืคื•ื ืงืฆื™ื•ื ืœื™ื™ื ืžื•ื‘ื ื™ื ืจื‘ื™ื. ื—ืœืงื ืžื•ื›ืจื™ื ื”ื™ื˜ื‘ ืžื’ื™ืจืกืื•ืช ืงื•ื“ืžื•ืช ืฉืœ Java. ืœืžืฉืœ Comparator ืื• Runnable . ืžืžืฉืงื™ื ืืœื” ืžื•ืจื—ื‘ื™ื ื›ืš ืฉื™ื›ืœืœื• ืชืžื™ื›ืช lambda ื‘ืืžืฆืขื•ืช ื”ื”ืขืจื” @FunctionalInterface . ืื‘ืœ ื”-API ืฉืœ Java 8 ืžืœื ื’ื ื‘ืžืžืฉืงื™ื ืคื•ื ืงืฆื™ื•ื ืœื™ื™ื ื—ื“ืฉื™ื ืฉื™ืงืœื• ืขืœื™ื›ื ืืช ื”ื—ื™ื™ื. ื—ืœืง ืžื”ืžืžืฉืงื™ื ื”ืœืœื• ืžื•ื›ืจื™ื ื”ื™ื˜ื‘ ืžืกืคืจื™ื™ืช ื”ื’ื•ื™ืื‘ื” ืฉืœ ื’ื•ื’ืœ . ื’ื ืื ืืชื” ืžื›ื™ืจ ืืช ื”ืกืคืจื™ื™ื” ื”ื–ื•, ื›ื“ืื™ ืฉืชืกืชื›ืœ ืžืงืจื•ื‘ ืขืœ ืื•ืคืŸ ื”ืจื—ื‘ื” ืฉืœ ืžืžืฉืงื™ื ืืœื”, ืขื ื›ืžื” ืฉื™ื˜ื•ืช ื”ืจื—ื‘ื” ืฉื™ืžื•ืฉื™ื•ืช.
ืคืจื“ื™ืงื˜ื™ื
ืคืจื“ื™ืงื˜ื™ื ื”ื ืคื•ื ืงืฆื™ื•ืช ื‘ื•ืœื™ืื ื™ื•ืช ืขื ืืจื’ื•ืžื ื˜ ืื—ื“. ื”ืžืžืฉืง ืžื›ื™ืœ ืฉื™ื˜ื•ืช ื‘ืจื™ืจืช ืžื—ื“ืœ ืฉื•ื ื•ืช ืœื™ืฆื™ืจืช ื‘ื™ื˜ื•ื™ื™ื ืœื•ื’ื™ื™ื ืžื•ืจื›ื‘ื™ื (ื•ืื•, ืฉืœื™ืœื”) ื‘ืืžืฆืขื•ืช ืคืจื“ื™ืงื˜ื™ื Predicate predicate = (s) -> s.length() > 0; predicate.test("foo"); // true predicate.negate().test("foo"); // false Predicate nonNull = Objects::nonNull; Predicate isNull = Objects::isNull; Predicate isEmpty = String::isEmpty; Predicate isNotEmpty = isEmpty.negate();
ืคื•ื ืงืฆื™ื•ืช
ืคื•ื ืงืฆื™ื•ืช ืœื•ืงื—ื•ืช ืืจื’ื•ืžื ื˜ ืื—ื“ ื•ืžืคื™ืงื•ืช ืชื•ืฆืื”. ื ื™ืชืŸ ืœื”ืฉืชืžืฉ ื‘ืฉื™ื˜ื•ืช ื‘ืจื™ืจืช ืžื—ื“ืœ ื›ื“ื™ ืœืฉืœื‘ ืžืกืคืจ ืคื•ื ืงืฆื™ื•ืช ื™ื—ื“ ืœืฉืจืฉืจืช ืื—ืช (ื—ื™ื‘ื•ืจ, ื•ืœืื—ืจ ืžื›ืŸ). Function toInteger = Integer::valueOf; Function backToString = toInteger.andThen(String::valueOf); backToString.apply("123"); // "123"
ืกืคืงื™ื
ื”ืกืคืงื™ื ืžื—ื–ื™ืจื™ื ืชื•ืฆืื” (ืžื•ืคืข) ืžืกื•ื’ ื–ื” ืื• ืื—ืจ. ื‘ื ื™ื’ื•ื“ ืœืคื•ื ืงืฆื™ื•ืช, ืกืคืงื™ื ืœื ืœื•ืงื—ื™ื ืืจื’ื•ืžื ื˜ื™ื. Supplier personSupplier = Person::new; personSupplier.get(); // new Person
ืฆืจื›ื ื™ื
ืฆืจื›ื ื™ื ืžื™ื™ืฆื’ื™ื ืฉื™ื˜ื•ืช ืžืžืฉืง ืขื ืืจื’ื•ืžื ื˜ ื™ื—ื™ื“. Consumer greeter = (p) -> System.out.println("Hello, " + p.firstName); greeter.accept(new Person("Luke", "Skywalker"));
ืžืฉื•ื•ื™ื
ืžืฉื•ื•ื™ื ืžื•ื›ืจื™ื ืœื ื• ืžื’ืจืกืื•ืช ืงื•ื“ืžื•ืช ืฉืœ Java. Java 8 ืžืืคืฉืจ ืœืš ืœื”ื•ืกื™ืฃ ืฉื™ื˜ื•ืช ื‘ืจื™ืจืช ืžื—ื“ืœ ืฉื•ื ื•ืช ืœืžืžืฉืงื™ื. Comparator comparator = (p1, p2) -> p1.firstName.compareTo(p2.firstName); Person p1 = new Person("John", "Doe"); Person p2 = new Person("Alice", "Wonderland"); comparator.compare(p1, p2); // > 0 comparator.reversed().compare(p1, p2); // < 0
ืื•ืคืฆื™ื•ื ืœื™ื™ื
ืžืžืฉืง ื”ืื•ืคืฆื™ื•ื ืœื™ ืื™ื ื• ืคื•ื ืงืฆื™ื•ื ืœื™, ืืš ื”ื•ื ื›ืœื™ ืขื–ืจ ื ื”ื“ืจ ืœืžื ื™ืขืช NullPointerException . ื–ื•ื”ื™ ื ืงื•ื“ื” ื—ืฉื•ื‘ื” ืœืกืขื™ืฃ ื”ื‘ื, ืื– ื‘ื•ืื• ื ืกืชื›ืœ ื‘ืžื”ื™ืจื•ืช ืขืœ ืื™ืš ื”ืžืžืฉืง ื”ื–ื” ืขื•ื‘ื“. ื”ืžืžืฉืง ื”ืื•ืคืฆื™ื•ื ืœื™ ื”ื•ื ืžื™ื›ืœ ืคืฉื•ื˜ ืœืขืจื›ื™ื ืฉื™ื›ื•ืœื™ื ืœื”ื™ื•ืช null ืื• ืœื null. ืชืืจื• ืœืขืฆืžื›ื ืฉืฉื™ื˜ื” ื™ื›ื•ืœื” ืœื”ื—ื–ื™ืจ ืขืจืš ืื• ื›ืœื•ื. ื‘-Java 8, ื‘ืžืงื•ื ืœื”ื—ื–ื™ืจ null , ืืชื” ืžื—ื–ื™ืจ ืžื•ืคืข ืื•ืคืฆื™ื•ื ืœื™ . Comparator comparator = (p1, p2) -> p1.firstName.compareTo(p2.firstName); Person p1 = new Person("John", "Doe"); Person p2 = new Person("Alice", "Wonderland"); comparator.compare(p1, p2); // > 0 comparator.reversed().compare(p1, p2); // < 0

ื–ืจื

java.util.Stream ื”ื•ื ืจืฆืฃ ืฉืœ ืืœืžื ื˜ื™ื ืฉืขืœื™ื”ื ืžืชื‘ืฆืขืช ืคืขื•ืœื” ืื—ืช ืื• ืจื‘ื•ืช. ื›ืœ ืคืขื•ืœืช ื–ืจื ื”ื™ื ื‘ื™ื ื™ื™ื ืื• ืžืกื•ืฃ. ืคืขื•ืœื•ืช ื˜ืจืžื™ื ืœ ืžื—ื–ื™ืจื•ืช ืชื•ืฆืื” ืžืกื•ื’ ืžืกื•ื™ื, ื‘ืขื•ื“ ืฉืคืขื•ืœื•ืช ื‘ื™ื ื™ื™ื ืžื—ื–ื™ืจื•ืช ืืช ืื•ื‘ื™ื™ืงื˜ ื”ื–ืจื ืขืฆืžื•, ื•ืžืืคืฉืจื•ืช ืœื™ืฆื•ืจ ืฉืจืฉืจืช ืงืจื™ืื•ืช ืœืžืชื•ื“ื”. Stream ื”ื•ื ืžืžืฉืง, ื›ืžื• java.util.Collection ืขื‘ื•ืจ ืจืฉื™ืžื•ืช ื•ืกื˜ื™ื (ืžืคื•ืช ืื™ื ืŸ ื ืชืžื›ื•ืช).ื›ืœ ืคืขื•ืœืช Stream ื™ื›ื•ืœื” ืœื”ืชื‘ืฆืข ื‘ืจืฆืฃ ืื• ื‘ืžืงื‘ื™ืœ. ื‘ื•ืื• ื ืกืชื›ืœ ืขืœ ืื™ืš ืคื•ืขืœ ื”ื–ืจื. ืจืืฉื™ืช, ื ื™ืฆื•ืจ ืงื•ื“ ืœื“ื•ื’ืžื” ื‘ืฆื•ืจื” ืฉืœ ืจืฉื™ืžืช ืžื—ืจื•ื–ื•ืช: ืื•ืกืคื™ื ื‘-Java 8 ืžืฉื•ืคืจื™ื ื›ืš ืฉืชื•ื›ืœ ืœื™ืฆื•ืจ ื–ืจืžื™ื ื“ื™ ืคืฉื•ื˜ ืขืœ ื™ื“ื™ ืงืจื™ืื” ืœ- Collection.stream() ืื• Collection.parallelStream() . ื”ืกืขื™ืฃ ื”ื‘ื ื™ืกื‘ื™ืจ ืืช ืคืขื•ืœื•ืช ื”ื–ืจื ื”ื—ืฉื•ื‘ื•ืช ื•ื”ืคืฉื•ื˜ื•ืช ื‘ื™ื•ืชืจ. List stringCollection = new ArrayList<>(); stringCollection.add("ddd2"); stringCollection.add("aaa2"); stringCollection.add("bbb1"); stringCollection.add("aaa1"); stringCollection.add("bbb3"); stringCollection.add("ccc"); stringCollection.add("bbb2"); stringCollection.add("ddd1");
ืœึฐืกึทื ึตืŸ
ืžืกื ืŸ ืžืงื‘ืœ ืคืจื“ื™ืงื˜ื™ื ืœืกื™ื ื•ืŸ ื›ืœ ืจื›ื™ื‘ื™ ื”ื–ืจื. ืคืขื•ืœื” ื–ื• ื”ื™ื ื‘ื™ื ื™ื™ื, ืžื” ืฉืžืืคืฉืจ ืœื ื• ืœืงืจื•ื ืœืคืขื•ืœื•ืช ื–ืจื ืื—ืจื•ืช (ืœืžืฉืœ forEach) ืขืœ ื”ืชื•ืฆืื” ื”ืžืชืงื‘ืœืช (ื”ืžืกื•ื ื ืช). ForEach ืžืงื‘ืœ ืคืขื•ืœื” ืฉืชืชื‘ืฆืข ืขืœ ื›ืœ ืจื›ื™ื‘ ืฉืœ ื”ื–ืจื ืฉื›ื‘ืจ ืžืกื•ื ืŸ. ForEach ื”ื™ื ืคืขื•ืœื” ืžืกื•ืฃ. ื™ืชืจ ืขืœ ื›ืŸ, ื”ืชืงืฉืจื•ืช ืœืคืขื•ืœื•ืช ืื—ืจื•ืช ื”ื™ื ื‘ืœืชื™ ืืคืฉืจื™ืช. stringCollection .stream() .filter((s) -> s.startsWith("a")) .forEach(System.out::println); // "aaa2", "aaa1"
ืžึฐืžื•ึผื™ึธืŸ
ืžืžื•ื™ืŸ ื”ื™ื ืคืขื•ืœืช ื‘ื™ื ื™ื™ื ืฉืžื—ื–ื™ืจื” ื™ื™ืฆื•ื’ ืžืžื•ื™ืŸ ืฉืœ ื–ืจื. ื”ืืœืžื ื˜ื™ื ืžืžื•ื™ื ื™ื ื‘ืกื“ืจ ื”ื ื›ื•ืŸ ืืœื ืื ืชืฆื™ื™ืŸ ืืช ื”-Comparator ืฉืœืš . stringCollection .stream() .sorted() .filter((s) -> s.startsWith("a")) .forEach(System.out::println); // "aaa1", "aaa2" ื–ื›ื•ืจ ืฉืžื™ื•ืŸ ื™ื•ืฆืจ ื™ื™ืฆื•ื’ ืžืžื•ื™ืŸ ืฉืœ ื–ืจื ืžื‘ืœื™ ืœื”ืฉืคื™ืข ืขืœ ื”ืื•ืกืฃ ืขืฆืžื•. ื”ืกื“ืจ ืฉืœ ืจื›ื™ื‘ื™ stringCollection ื ื•ืชืจ ืœืœื ืฉื™ื ื•ื™: System.out.println(stringCollection); // ddd2, aaa2, bbb1, aaa1, bbb3, ccc, bbb2, ddd1
ืžึทืคึผึธื”
ืคืขื•ืœืช ืžืคืช ื”ื‘ื™ื ื™ื™ื ืžืžื™ืจื” ื›ืœ ืืœืžื ื˜ ืœืื•ื‘ื™ื™ืงื˜ ืื—ืจ ื‘ืืžืฆืขื•ืช ื”ืคื•ื ืงืฆื™ื” ื”ืžืชืงื‘ืœืช. ื”ื“ื•ื’ืžื” ื”ื‘ืื” ืžืžื™ืจื” ื›ืœ ืžื—ืจื•ื–ืช ืœืžื—ืจื•ื–ืช ืจื™ืฉื™ื•ืช. ืื‘ืœ ืืชื” ื™ื›ื•ืœ ื’ื ืœื”ืฉืชืžืฉ ื‘ืžืคื” ื›ื“ื™ ืœื”ืžื™ืจ ื›ืœ ืื•ื‘ื™ื™ืงื˜ ืœืกื•ื’ ืื—ืจ. ืกื•ื’ ืื•ื‘ื™ื™ืงื˜ื™ ื”ื–ืจื ื”ืžืชืงื‘ืœื™ื ืชืœื•ื™ ื‘ืกื•ื’ ื”ืคื•ื ืงืฆื™ื” ืฉืืชื” ืžืขื‘ื™ืจ ืœืžื™ืคื•ื™. stringCollection .stream() .map(String::toUpperCase) .sorted((a, b) -> b.compareTo(a)) .forEach(System.out::println); // "DDD2", "DDD1", "CCC", "BBB3", "BBB2", "AAA2", "AAA1"
ื”ืชืืžื”
ื ื™ืชืŸ ืœื”ืฉืชืžืฉ ื‘ืคืขื•ืœื•ืช ื”ืชืืžื” ืฉื•ื ื•ืช ื›ื“ื™ ืœื‘ื“ื•ืง ืืช ื”ืืžืช ืฉืœ ืคืจื“ื™ืงื˜ ืžืกื•ื™ื ื‘ื™ื—ืก ื”ื–ืจื. ื›ืœ ืคืขื•ืœื•ืช ื”ื”ืชืืžื” ื”ืŸ ืกื•ืคื ื™ื•ืช ื•ืžื—ื–ื™ืจื•ืช ืชื•ืฆืื” ื‘ื•ืœื™ืื ื™ืช. boolean anyStartsWithA = stringCollection .stream() .anyMatch((s) -> s.startsWith("a")); System.out.println(anyStartsWithA); // true boolean allStartsWithA = stringCollection .stream() .allMatch((s) -> s.startsWith("a")); System.out.println(allStartsWithA); // false boolean noneStartsWithZ = stringCollection .stream() .noneMatch((s) -> s.startsWith("z")); System.out.println(noneStartsWithZ); // true
ืœืกืคื•ืจ
ืกืคื™ืจื” ื”ื™ื ืคืขื•ืœืช ื˜ืจืžื™ื ืœ ืฉืžื—ื–ื™ืจื” ืืช ืžืกืคืจ ืจื›ื™ื‘ื™ ื”ื–ืจื ื›ืืจื•ื›ื” . long startsWithB = stringCollection .stream() .filter((s) -> s.startsWith("b")) .count(); System.out.println(startsWithB); // 3
ืœึฐื”ึทืคื—ึดื™ืช
ื–ื•ื”ื™ ืคืขื•ืœืช ื˜ืจืžื™ื ืœ ื”ืžืงืฆืจืช ืืช ืจื›ื™ื‘ื™ ื”ื–ืจื™ืžื” ื‘ืืžืฆืขื•ืช ื”ืคื•ื ืงืฆื™ื” ืฉืขื‘ืจื”. ื”ืชื•ืฆืื” ืชื”ื™ื” ืื•ืคืฆื™ื•ื ืœื™ ื”ืžื›ื™ืœ ืืช ื”ืขืจืš ื”ืžืงื•ืฆืจ. Optional reduced = stringCollection .stream() .sorted() .reduce((s1, s2) -> s1 + "#" + s2); reduced.ifPresent(System.out::println); // "aaa1#aaa2#bbb1#bbb2#bbb3#ccc#ddd1#ddd2"

ื–ืจืžื™ื ืžืงื‘ื™ืœื™ื

ื›ืคื™ ืฉื”ื•ื–ื›ืจ ืœืขื™ืœ, ื–ืจืžื™ื ื™ื›ื•ืœื™ื ืœื”ื™ื•ืช ืขื•ืงื‘ื™ื ืื• ืžืงื‘ื™ืœื™ื. ืคืขื•ืœื•ืช ื–ืจื ืจืฆื™ืฃ ืžื‘ื•ืฆืขื•ืช ืขืœ ื—ื•ื˜ ื˜ื•ืจื™, ื‘ืขื•ื“ ืฉืคืขื•ืœื•ืช ื–ืจื ืžืงื‘ื™ืœ ืžื‘ื•ืฆืขื•ืช ืขืœ ืžืกืคืจ ื—ื•ื˜ื™ื ืžืงื‘ื™ืœื™ื. ื”ื“ื•ื’ืžื” ื”ื‘ืื” ืžื“ื’ื™ืžื” ื›ื™ืฆื“ ืœื”ื’ื“ื™ืœ ื‘ืงืœื•ืช ืืช ื”ื‘ื™ืฆื•ืขื™ื ื‘ืืžืฆืขื•ืช ื–ืจื ืžืงื‘ื™ืœ. ืจืืฉื™ืช, ื‘ื•ืื• ื ื™ืฆื•ืจ ืจืฉื™ืžื” ื’ื“ื•ืœื” ืฉืœ ืืœืžื ื˜ื™ื ื™ื™ื—ื•ื“ื™ื™ื: ื›ืขืช ื ืงื‘ืข ืืช ื”ื–ืžืŸ ื”ืžื•ืฉืงืข ื‘ืžื™ื•ืŸ ื”ื–ืจื ืฉืœ ื”ืื•ืกืฃ ื”ื–ื”. int max = 1000000; List values = new ArrayList<>(max); for (int i = 0; i < max; i++) { UUID uuid = UUID.randomUUID(); values.add(uuid.toString()); }
ื–ืจื ืกื“ืจืชื™
long t0 = System.nanoTime(); long count = values.stream().sorted().count(); System.out.println(count); long t1 = System.nanoTime(); long millis = TimeUnit.NANOSECONDS.toMillis(t1 - t0); System.out.println(String.format("sequential sort took: %d ms", millis)); // sequential sort took: 899 ms
ื–ืจื ืžืงื‘ื™ืœ
long t0 = System.nanoTime(); long count = values.parallelStream().sorted().count(); System.out.println(count); long t1 = System.nanoTime(); long millis = TimeUnit.NANOSECONDS.toMillis(t1 - t0); System.out.println(String.format("parallel sort took: %d ms", millis)); // parallel sort took: 472 ms ื›ืคื™ ืฉืืชื” ื™ื›ื•ืœ ืœืจืื•ืช, ืฉื ื™ ื”ืฉื‘ืจื™ื ื›ืžืขื˜ ื–ื”ื™ื, ืื‘ืœ ื”ืžื™ื•ืŸ ื”ืžืงื‘ื™ืœ ืžื”ื™ืจ ื™ื•ืชืจ ื‘-50%. ื›ืœ ืžื” ืฉืืชื” ืฆืจื™ืš ื”ื•ื ืœืฉื ื•ืช ืืช stream() ืœ- parallelStream() .

ืžึทืคึผึธื”

ื›ืคื™ ืฉื›ื‘ืจ ืฆื•ื™ืŸ, ืžืคื•ืช ืื™ื ืŸ ืชื•ืžื›ื•ืช ื‘ื–ืจืžื™ื. ื‘ืžืงื•ื ื–ืืช, ืžืคื” ื”ื—ืœื” ืœืชืžื•ืš ื‘ืฉื™ื˜ื•ืช ื—ื“ืฉื•ืช ื•ืฉื™ืžื•ืฉื™ื•ืช ืœืคืชืจื•ืŸ ื‘ืขื™ื•ืช ื ืคื•ืฆื•ืช. ื”ืงื•ื“ ืœืžืขืœื” ืฆืจื™ืš ืœื”ื™ื•ืช ืื™ื ื˜ื•ืื™ื˜ื™ื‘ื™: putIfAbsent ืžื–ื”ื™ืจ ืื•ืชื ื• ืžืœื›ืชื•ื‘ ื‘ื“ื™ืงื•ืช null ื ื•ืกืคื•ืช. forEach ืžืงื‘ืœ ืคื•ื ืงืฆื™ื” ืœื‘ื™ืฆื•ืข ืขื‘ื•ืจ ื›ืœ ืื—ื“ ืžืขืจื›ื™ ื”ืžืคื”. ื“ื•ื’ืžื” ื–ื• ืžืจืื” ื›ื™ืฆื“ ืžืชื‘ืฆืขื•ืช ืคืขื•ืœื•ืช ืขืœ ืขืจื›ื™ ืžืคื” ื‘ืืžืฆืขื•ืช ืคื•ื ืงืฆื™ื•ืช: ืœืื—ืจ ืžื›ืŸ, ื ืœืžื“ ื›ื™ืฆื“ ืœื”ืกื™ืจ ืขืจืš ืขื‘ื•ืจ ืžืคืชื— ื ืชื•ืŸ ืจืง ืื ื”ื•ื ืžืžื•ืคื” ืœืขืจืš ื ืชื•ืŸ: ืฉื™ื˜ื” ื˜ื•ื‘ื” ื ื•ืกืคืช: ืžื™ื–ื•ื’ ืขืจื›ื™ ืžืคื” ื”ื•ื ื“ื™ ืงืœ: ืžื™ื–ื•ื’ ืื• ืฉืชื›ื ื™ืก ืืช ื”ืžืคืชื—/ื”ืขืจืš ืœืžืคื” , ืื ืื™ืŸ ืขืจืš ืขื‘ื•ืจ ื”ืžืคืชื— ื”ื ืชื•ืŸ, ืื• ืฉืชืงืจื ืคื•ื ืงืฆื™ื™ืช ื”ืžื™ื–ื•ื’, ืฉืชืฉื ื” ืืช ื”ืขืจืš ืฉืœ ื”ืขืจืš ื”ืงื™ื™ื. Map map = new HashMap<>(); for (int i = 0; i < 10; i++) { map.putIfAbsent(i, "val" + i); } map.forEach((id, val) -> System.out.println(val)); map.computeIfPresent(3, (num, val) -> val + num); map.get(3); // val33 map.computeIfPresent(9, (num, val) -> null); map.containsKey(9); // false map.computeIfAbsent(23, num -> "val" + num); map.containsKey(23); // true map.computeIfAbsent(3, num -> "bam"); map.get(3); // val33 map.remove(3, "val3"); map.get(3); // val33 map.remove(3, "val33"); map.get(3); // null map.getOrDefault(42, "not found"); // not found map.merge(9, "val9", (value, newValue) -> value.concat(newValue)); map.get(9); // val9 map.merge(9, "concat", (value, newValue) -> value.concat(newValue)); map.get(9); // val9concat
ื”ืขืจื•ืช
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION