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

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

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

API ืฉืœ ืชืืจื™ืš

Java 8 ืžื›ื™ืœ ืžืžืฉืงื™ API ื—ื“ืฉื™ื ืœื’ืžืจื™ ืฉืœ ืชืืจื™ืš ื•ืฉืขื” ื‘ื—ื‘ื™ืœืช java.time. ื”-Date API ื”ื—ื“ืฉ ื“ื•ืžื” ืœืกืคืจื™ื™ืช Joda-Time , ืื•ืœื ื”ื•ื ืื™ื ื• ื–ื”ื”. ื”ื“ื•ื’ืžืื•ืช ื”ื‘ืื•ืช ื™ื›ืกื• ืืช ื”ื—ืœืงื™ื ื”ื—ืฉื•ื‘ื™ื ื‘ื™ื•ืชืจ ืฉืœ ื”-API ื”ื—ื“ืฉ.
ืฉืึธืขื•ึนืŸ
ืฉืขื•ืŸ ื ื•ืชืŸ ื’ื™ืฉื” ืœืชืืจื™ืš ื•ืœืฉืขื” ื”ื ื•ื›ื—ื™ื™ื. ืฉืขื•ื ื™ื ืžื•ื“ืขื™ื ืœืื–ื•ืจื™ ื–ืžืŸ ื•ืœื›ืŸ ื ื™ืชืŸ ืœื”ืฉืชืžืฉ ื‘ื”ื ื‘ืžืงื•ื System.currentTimeMillis() ื›ื“ื™ ืœื”ื—ื–ื™ืจ ืืช ื”ื–ืžืŸ ื”ื ื•ื›ื—ื™ ื‘ืืœืคื™ื•ืช ืฉื ื™ื•ืช. ืกื•ื’ ื–ื” ืฉืœ ื“ื™ื•ืง ื–ืžืŸ ืžื™ื•ืฆื’ ื’ื ืขืœ ื™ื“ื™ ื”ืžื—ืœืงื” Instant . ื ื™ืชืŸ ืœื”ืฉืชืžืฉ ื‘ืžื™ื™ื“ื™ื•ืช ืœื™ืฆื™ืจืช ืื•ื‘ื™ื™ืงื˜ื™ java.util.Date ืฉืขื‘ืจื• ื‘ื™ืจื•ืฉื” . Clock clock = Clock.systemDefaultZone(); long millis = clock.millis(); Instant instant = clock.instant(); Date legacyDate = Date.from(instant); // legacy java.util.Date
ืื–ื•ืจื™ ื–ืžืŸ
ืื–ื•ืจื™ ื–ืžืŸ ืžื™ื•ืฆื’ื™ื ืขืœ ื™ื“ื™ ื”ืžื—ืœืงื” ื”ืžื•ืคืฉื˜ืช ZoneId . ื ื™ืชืŸ ืœื’ืฉืช ืืœื™ื”ื ื‘ืงืœื•ืช ื‘ืืžืฆืขื•ืช ืฉื™ื˜ื•ืช ืžืคืขืœ ืกื˜ื˜ื™ืกื˜ื™ื•ืช. ืื–ื•ืจื™ ื–ืžืŸ ืžื’ื“ื™ืจื™ื ืงื™ื–ื•ื–ื™ื ืฉื—ืฉื•ื‘ื™ื ืœื”ืžืจื” ื‘ื™ืŸ ืชืืจื™ืš ื•ืฉืขื” ืžื™ื™ื“ื™ื™ื ืœืžืงื•ืžื™ื™ื. System.out.println(ZoneId.getAvailableZoneIds()); // prints all available timezone ids ZoneId zone1 = ZoneId.of("Europe/Berlin"); ZoneId zone2 = ZoneId.of("Brazil/East"); System.out.println(zone1.getRules()); System.out.println(zone2.getRules()); // ZoneRules[currentStandardOffset=+01:00] // ZoneRules[currentStandardOffset=-03:00]
ื–ืžืŸ ืžืงื•ืžื™
LocalTime ืžืฆื™ื’ ืืช ื”ืฉืขื” ืœืœื ืื–ื•ืจ ื–ืžืŸ, ืœืžืฉืœ 17:30:15. ื”ื“ื•ื’ืžื” ื”ื‘ืื” ื™ื•ืฆืจืช ืฉื ื™ ืื•ื‘ื™ื™ืงื˜ื™ ื–ืžืŸ ืžืงื•ืžื™ื™ื ืขื‘ื•ืจ ืื–ื•ืจื™ ื”ื–ืžืŸ ืฉื”ื•ื’ื“ืจื• ืœืขื™ืœ. ืœืื—ืจ ืžื›ืŸ ื ืฉื•ื•ื” ื‘ื™ืŸ ืฉื ื™ ื”ืขืฆืžื™ื ื•ื ื—ืฉื‘ ืืช ื”ื”ื‘ื“ืœ ื‘ืฉืขื•ืช ื•ื“ืงื•ืช ื‘ื™ื ื™ื”ื. LocalTime now1 = LocalTime.now(zone1); LocalTime now2 = LocalTime.now(zone2); System.out.println(now1.isBefore(now2)); // false long hoursBetween = ChronoUnit.HOURS.between(now1, now2); long minutesBetween = ChronoUnit.MINUTES.between(now1, now2); System.out.println(hoursBetween); // -3 System.out.println(minutesBetween); // -239 LocalTime ืžื’ื™ืข ืขื ืฉื™ื˜ื•ืช ืžืคืขืœ ืฉื•ื ื•ืช ื›ื“ื™ ืœื”ืงืœ ืขืœ ื”ืžื•ืคืข, ื›ื•ืœืœ ื ื™ืชื•ื— ืžื—ืจื•ื–ื•ืช. LocalTime late = LocalTime.of(23, 59, 59); System.out.println(late); // 23:59:59 DateTimeFormatter germanFormatter = DateTimeFormatter .ofLocalizedTime(FormatStyle.SHORT) .withLocale(Locale.GERMAN); LocalTime leetTime = LocalTime.parse("13:37", germanFormatter); System.out.println(leetTime); // 13:37
LocalDate
LocalDate ืžืฆื™ื’ ืชืืจื™ืš ืกืคืฆื™ืคื™, ืœืžืฉืœ 2014-03-11. ื”ืžื•ืคืขื™ื ืื™ื ื ื ื™ืชื ื™ื ืœืฉื™ื ื•ื™ ื•ืคื•ืขืœื™ื ื‘ื“ื•ืžื” ืœ-LocalTime. ื”ื“ื•ื’ืžื” ืžื“ื’ื™ืžื” ื›ื™ืฆื“ ืœื—ืฉื‘ ืชืืจื™ืš ื—ื“ืฉ ืขืœ ื™ื“ื™ ื”ื•ืกืคื” ืื• ื—ื™ืกื•ืจ ืฉืœ ื™ืžื™ื, ื—ื•ื“ืฉื™ื ืื• ืฉื ื™ื. ื–ื›ื•ืจ ืฉื›ืœ ืคืขื•ืœื” ืขืœ ืื•ื‘ื™ื™ืงื˜ ืžื—ื–ื™ืจื” ืื•ื‘ื™ื™ืงื˜ ื—ื“ืฉ. LocalDate today = LocalDate.now(); LocalDate tomorrow = today.plus(1, ChronoUnit.DAYS); LocalDate yesterday = tomorrow.minusDays(2); LocalDate independenceDay = LocalDate.of(2014, Month.JULY, 4); DayOfWeek dayOfWeek = independenceDay.getDayOfWeek(); System.out.println(dayOfWeek); // FRIDAY ื ื™ืชื•ื— LocalDate ืžืžื—ืจื•ื–ืช ื”ื•ื ืคืฉื•ื˜ ื›ืžื• ื ื™ืชื•ื— LocalTime: DateTimeFormatter germanFormatter = DateTimeFormatter .ofLocalizedDate(FormatStyle.MEDIUM) .withLocale(Locale.GERMAN); LocalDate xmas = LocalDate.parse("24.12.2014", germanFormatter); System.out.println(xmas); // 2014-12-24
LocalDateTime
LocalDateTime ืžืฆื™ื’ ืืช ืชืืจื™ืš ื”ืฉืขื”. ื–ื”ื• ืฉื™ืœื•ื‘ ืฉืœ ื”ืชืืจื™ืš ื•ื”ืฉืขื” ื”ืžืคื•ืจื˜ื™ื ืœืขื™ืœ, ื‘ืขื•ืชืง ืื—ื“. ืžื•ืคืขื™ LocalDateTime ืื™ื ื ื ื™ืชื ื™ื ืœืฉื™ื ื•ื™ ื•ืคื•ืขืœื™ื ื‘ื“ื•ืžื” ืœ-LocalTime ื•ืœ-LocalDate. ืื ื• ื™ื›ื•ืœื™ื ืœื”ืฉืชืžืฉ ื‘ืฉื™ื˜ื•ืช ื›ื“ื™ ืœืื—ื–ืจ ืืช ืขืจื›ื™ ืžืืคื™ื™ืŸ ื”ืžื•ืคืข ืฉืื ื• ืฆืจื™ื›ื™ื: LocalDateTime sylvester = LocalDateTime.of(2014, Month.DECEMBER, 31, 23, 59, 59); DayOfWeek dayOfWeek = sylvester.getDayOfWeek(); System.out.println(dayOfWeek); // WEDNESDAY Month month = sylvester.getMonth(); System.out.println(month); // DECEMBER long minuteOfDay = sylvester.getLong(ChronoField.MINUTE_OF_DAY); System.out.println(minuteOfDay); // 1439 ื™ื—ื“ ืขื ืžื™ื“ืข ื ื•ืกืฃ ืขืœ ืื–ื•ืจ ื–ืžืŸ, ื ื™ืชืŸ ืœื”ืžื™ืจ ืืช ื”ืžื•ืคืข ืœืื™ื ืกื˜ื ื˜. ื ื™ืชืŸ ืœื”ืžื™ืจ ืžื™ื™ื“ื™ื•ืช ื‘ืงืœื•ืช ืœืกื•ื’ื™ื ื”ื™ืฉื ื™ื ืฉื™ื•ืจืฉื™ื ืž-java.util.Date. Instant instant = sylvester .atZone(ZoneId.systemDefault()) .toInstant(); Date legacyDate = Date.from(instant); System.out.println(legacyDate); // Wed Dec 31 23:59:59 CET 2014 ืขื™ืฆื•ื‘ ืชืืจื™ืš-ืฉืขื” ืคื•ืขืœ ื‘ืื•ืชื• ืื•ืคืŸ ื›ืžื• ืขื™ืฆื•ื‘ ืชืืจื™ืš ืื• ืฉืขื”. ื‘ืžืงื•ื ืœื”ืฉืชืžืฉ ื‘ืคื•ืจืžื˜ื™ื ืžื•ื’ื“ืจื™ื ืžืจืืฉ ืฉืœ ืชืืจื™ืš, ืื ื• ื™ื›ื•ืœื™ื ืœื”ืฉืชืžืฉ ื‘ืคื•ืจืžื˜ื™ื ืžื•ื’ื“ืจื™ื ื™ื“ื ื™ืช. DateTimeFormatter formatter = DateTimeFormatter .ofPattern("MMM dd, yyyy - HH:mm"); LocalDateTime parsed = LocalDateTime.parse("Nov 03, 2014 - 07:13", formatter); String string = formatter.format(parsed); System.out.println(string); // Nov 03, 2014 - 07:13 ื‘ื ื™ื’ื•ื“ ืœ-java.text.NumberFormat, ื”-DateTimeFormatter ื”ื—ื“ืฉ ืื™ื ื• ื ื™ืชืŸ ืœืฉื™ื ื•ื™ ื•ื‘ื˜ื•ื— ื‘ืฉืจืฉื•ืจ. ืœืžื™ื“ืข ื ื•ืกืฃ ืขืœ ื”ืชื—ื‘ื™ืจ ืœื›ืชื™ื‘ืช ืคื•ืจืžื˜ื™ื, ืงืจื ื›ืืŸ .

ื”ืขืจื•ืช

ื ื™ืชืŸ ืœื—ื–ื•ืจ ืขืœ ื”ืขืจื•ืช ื‘-Java 8. ื‘ื•ืื• ื ืกืชื›ืœ ืขืœ ื“ื•ื’ืžื” ื›ื“ื™ ืœื”ืžื—ื™ืฉ ืื™ืš ื–ื” ืขื•ื‘ื“. ื›ื“ื™ ืœื”ืชื—ื™ืœ, ื ื’ื“ื™ืจ ืžืขื˜ืคืช ื”ืขืจื•ืช ื”ืžืื—ืกื ืช ืžืขืจืš ืฉืœ ื”ืขืจื•ืช ื—ื•ืงื™ื•ืช: @interface Hints { Hint[] value(); } @Repeatable(Hints.class) @interface Hint { String value(); } Java 8 ืžืืคืฉืจืช ืœื ื• ืœื”ืฉืชืžืฉ ื‘ืžืกืคืจ ื”ืขืจื•ืช ืžืื•ืชื• ืกื•ื’ ืขืœ ื™ื“ื™ ื”ื›ืจื–ืช ื”ื”ืขืจื” @Repeatable. ืืคืฉืจื•ืช 1: ืฉื™ืžื•ืฉ ื‘ื”ืขืจืช ื”ืžื›ื•ืœื” (ื”ื‘ื™ืช ืกืคืจ ื”ื™ืฉืŸ) (Java 8 ืžืืคืฉืจืช ืœื ื• ืœื”ืฉืชืžืฉ ื‘ื”ืขืจื•ืช ืžืจื•ื‘ื•ืช ืžืื•ืชื• ืกื•ื’ ืขืœ ื™ื“ื™ ื”ื›ืจื–ื” ืขืœ ื”ืขืจืช @Repeatable .) ืืคืฉืจื•ืช 1: ืฉื™ืžื•ืฉ ื‘ืžื™ื›ืœ ื”ื”ืขืจื•ืช (ื‘ื‘ื™ืช ื”ืกืคืจ ื”ื™ืฉืŸ) @Hints({@Hint("hint1"), @Hint("hint2")}) class Person {} ืืคืฉืจื•ืช 2: ืฉื™ืžื•ืฉ ื‘ื”ืขืจื•ืช ื—ื•ื–ืจื•ืช ( ืชื›ื•ื ื” ื—ื“ืฉื”) @Hint("hint1") @Hint("hint2") class Person {} ื‘ืืžืฆืขื•ืช ืืคืฉืจื•ืช ืฉื ื™ื™ื”, ืžื”ื“ืจ Java ืžื’ื“ื™ืจ ื‘ืื•ืคืŸ ืžืจื•ืžื– ืืช ื”ื”ืขืจื” @Hint. ื–ื” ื—ืฉื•ื‘ ืœืงืจื™ืืช ืžื™ื“ืข ื”ืขืจื•ืช ื‘ืืžืฆืขื•ืช ืจืคืœืงืฆื™ื”. Hint hint = Person.class.getAnnotation(Hint.class); System.out.println(hint); // null Hints hints1 = Person.class.getAnnotation(Hints.class); System.out.println(hints1.value().length); // 2 Hint[] hints2 = Person.class.getAnnotationsByType(Hint.class); System.out.println(hints2.length); // 2 ืœืžืจื•ืช ืฉืœื ื”ื›ืจื–ื ื• ืืช ื”ื”ืขืจื” @Hints ืขื‘ื•ืจ ื”ืžื—ืœืงื” Person , ื ื™ืชืŸ ืœืงืจื•ื ืื•ืชื” ื‘ืืžืฆืขื•ืช ื”ืฉื™ื˜ื” getAnnotation(Hints.class) . ืขื ื–ืืช, ืฉื™ื˜ื” ื ื•ื—ื” ื™ื•ืชืจ ื”ื™ื getAnnotationsByType , ื”ืžืกืคืงืช ื’ื™ืฉื” ืœื›ืœ ื”ื”ืขืจื•ืช ื‘ืืžืฆืขื•ืช ื”ืขืจืช @Hint . ื‘ื ื•ืกืฃ, ื”ืฉื™ืžื•ืฉ ื‘ื”ืขืจื•ืช ื‘-Java 8 ืžืชืจื—ื‘ ืœืฉืชื™ ืžื˜ืจื•ืช: @Target({ElementType.TYPE_PARAMETER, ElementType.TYPE_USE}) @interface MyAnnotation {}

ื–ื” ื”ื›ืœ

ื”ืžื“ืจื™ืš ืฉืœื™ ืœืชื›ื ื•ืช Java 8 ื”ื•ืฉืœื. ืื ืืชื” ืจื•ืฆื” ืœืœืžื•ื“ ืขื•ื“ ืขืœ ื›ืœ ื”ืžื—ืœืงื•ืช ื”ื—ื“ืฉื•ืช ื•ืชื›ื•ื ื•ืช ื”-API ื‘-JDK 8, ืคืฉื•ื˜ ืงืจื ืืช ื”ืžืืžืจ ื”ื‘ื ืฉืœื™. ื–ื” ื™ืขื–ื•ืจ ืœืš ืœื”ื‘ื™ืŸ ืืช ื›ืœ ื”ืžื—ืœืงื•ืช ื”ื—ื“ืฉื•ืช ื•ื”ืชื›ื•ื ื•ืช ื”ื ืกืชืจื•ืช ื‘-JDK 8, ื›ื’ื•ืŸ Arrays.parallelSort , StampedLock ื•- ComletableFuture .
ื”ืขืจื•ืช
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION