Highload fwdays — спікери зі Stackoverflow, Netflix, Google, AWS, Rovio | Київ, 5 жовтня
×Закрыть

Java дайджест #27: стабильные релизы, JEP 277, Stream API

В выпуске: Dropwizard 1.0.0; Lagom 1.0; Spring Framework 5.0 M1 и Spring Boot 1.4.0 GA; Bean Validation 2.0; JUnit 5; Java 8 для продвинутого уровня; список deprecated API.

Ссылки, на которые лучше таки нажать (по мнению автора), отмечены знаком (!)

Что-то вроде новостей

Вышел Vert.x 3.3.0

Вышел Dropwizard 1.0.0

Вышел Lagom 1.0. Как считаете, взлетит? Или лучше бы Lightbend/Typesafe и дальше фокусировались на Scala?

Еще не релиз но уже M1 Spring Framework 5.0

Spring Boot 1.4.0 GA

Релиз Apache Spark 2.0.0

3-го сентября во Львове пройдет JDay 2016, билеты еще остались.

Почитать и посмотреть

Developer Productivity Report от ZeroTurnaround.

(!) JUnit 5 — An Early Test Drive.

(!) Brian Goetz об Understanding Parallel Stream Performance in Java SE 8.

Bean Validation 2.0 — A new JSR is born!

Заметка на InfoQ о JEP 293: Guidelines for JDK Command-Line Tool Options.

(!) Замечательный список того что хотят задепрекейтить в рамках JEP 277. Уверен, что каждый найдет там что-то для себя. Вот только чем не угодил Optional.get?

Java 8 Top Tips. И еще немного рекламы IntelliJ IDEA, на этот раз для Spring-разработчиков.

Microsoft REST API Guidelines. Да Microsoft, да в дайджесте по Java.

Guide to Java 8 Collectors.

(!) Stream API: рекомендации лучших собаководов от Тагира Валеева.

«JIT-компилятор оптимизирует не круто, а очень круто» от Тагира Валеева.

Интересная статья про таймзоны. А еще там есть картинка, которая повергнет в ужас любого, кто захочет обрабатывать данные (содержащие время) из Антарктики.


Предложения и пожелания все еще принимаются или через завсклад и товаровэд администрацию ДОУ, или через твиттер @_silverwolf. Также можно оставлять комментарии в специально выделенной теме на форуме.


← Предыдущий выпуск: Java дайджест #26
Следующий выпуск: Java дайджест #28

LinkedIn

16 комментариев

Подписаться на комментарииОтписаться от комментариев Комментарии могут оставлять только пользователи с подтвержденными аккаунтами.

Ура, стриминг АПИ наконец уже релизнулся!

Я тут немного поэкспериментировал с тем как не потерять ссылки, и потерял несколько:
habrahabr.ru/post/305894 — «JIT-компилятор оптимизирует не круто, а очень круто» от Тагира Валеева.
.
kousenit.org/...ith-time-zones-in-java-8 — интересная статья про таймзоны. А еще там есть картинка которая повергнет в ужас любого что захочет обрабатывать данные (содержащие время) из Антарктики.
.
spark.apache.org/.../spark-release-2-0-0.html — релиз Apache Spark 2.0.0

Когда ты успеваешь статьи писать ))

А я и не успеваю: по ТДД готова на 10-20%, по РЕСТу где-то на 30% (за 3 месяца)
Дайджесты это побочный продукт профессиональной деятельности. 5-10 статей (по своему основному роду деятельности) за месяц — это минимум который должен читать человек, ИМХО.

Согласен. Причем мало их прочесть, еще нужно попытаться их понять, а в лучшем случае -применить. Благо есть возможность на галерном проекте =)

Vertx 3.3.2 уже зарелизился.

чем не угодил Optional.get?
В якомусь з попередніх дайджестів був розгорнутий діскач на цю тему.

Ага. Я не помню какое у меня мнение было тогда, но сейчас я против. Надо будет перечитать дискуссию, может стану за :)

А можна поцікавитись чому Ви проти?

Задача:
Есть коллекция прямоугольников, в каждом есть 4 стороны, которые не пустые: x1, x2, y1, y2.
Для дальнейших вычислений нам нужны минимальные и максимальные значения этих 4 величин.
Стримами можно решить через:
docs.oracle.com/...xBy-java.util.Comparator
Но вот незадача на выходе будет 4 опшинала и надо проверить все 4, при том что вы знаете что входная коллекция не пустая (прямо на входе обработали этот случай).
Альтернативы я придумал 2:
1) Крутить цикл, что ухудшит читабельность
2) Задать начально значение, что так же ухудшит читабельность.
Может есть еще варианты?

Якщо це прямокутник, то у нас 2 сторони.
Якщо сторони «не пустые» і «коллекция не пустая», get() гарантовано поверне нормальне значення.

Але я не зрозумів як ця задача висвітлює переваги get(). Його потрібно завжди юзати з isPresent(), що буде породжувати if/if-else/тернарний оператор, які вже реалізовані в orElse/orElseGet/orElseThrow.

Я розв’язав би цю задачу через

DoubleSummaryStatistics s = rectangles.stream().mapToDouble(Rectangle::getX).summaryStatistics();
double xMin = s.getMin(), xMax = s.getMax();

До речі, їх основна мотивація

Optional.get() is an «attractive nuisance» and is too tempting for programmers, leading to frequent errors.
Але я не зрозумів як ця задача висвітлює переваги get().
Я и не говорил о преимуществах. Я говорил что get() не является недостатком/проблемой. :)
Його потрібно завжди юзати з isPresent(),
Для задачи выше это будет 4 проверки, что ухудшит читабельность.
які вже реалізовані в orElse/orElseGet/orElseThrow.
Скорее всего это будет orElseThrow, который уже реализаван в get() :)
DoubleSummaryStatistics s = rectangles.stream().mapToDouble(Rectangle::getX).summaryStatistics();
double xMin = s.getMin(), xMax = s.getMax();
Не правильно, ибо xMin должно браться из x1, ибо xMax из x2, то есть у вас все равно будет 2 вызова.
Дополнительная проблема еще и в том что при таком подходе у вас всегда будет дефолтное значение. То есть когда ваш код переиспользуют на пустом списке (без предварительной проверки), то не огребут исключение, а получат дефолтное значение. А исправить исключение куда проще чем понять почему это у нас значение −100500 (не факт что в дальнейшем с полученными значениями не будет арифметических операций).
їх основна мотивація
Ну мотивация понятна: вокруг одни идиоты, давайте заберем у них гранату и выдадим гранату с надписью “не дергать за кольцо”.
Частично я с ними согласен.
то есть у вас все равно будет 2 вызова
Так, там будуть 2 виклики для x і y сторін. Згоден з Вами, що потрібно вставити всі перевірки на початку і кидати, наприклад, IAE.

Дякую за пояснення і дайджест.

Подписаться на комментарии