Вопросы с тегом «java8»

Java 8 относится к новейшей версии платформы Java.

10
Зачем использовать Optional в Java 8+ вместо традиционных проверок нулевых указателей?
Недавно мы перешли на Java 8. Теперь я вижу приложения, заполненные Optionalобъектами. До Java 8 (Стиль 1) Employee employee = employeeServive.getEmployee(); if(employee!=null){ System.out.println(employee.getId()); } После Java 8 (Стиль 2) Optional<Employee> employeeOptional = Optional.ofNullable(employeeService.getEmployee()); if(employeeOptional.isPresent()){ Employee employee = employeeOptional.get(); System.out.println(employee.getId()); } Я не вижу добавленной стоимости, Optional<Employee> employeeOptional = employeeService.getEmployee();когда сама …
110 java  java8 

5
Почему стандартные и статические методы были добавлены к интерфейсам в Java 8, когда у нас уже были абстрактные классы?
В Java 8 интерфейсы могут содержать реализованные методы, статические методы и так называемые методы «по умолчанию» (которые классам реализации не нужно переопределять). На мой (возможно, наивный) взгляд, не было необходимости нарушать подобные интерфейсы. Интерфейсы всегда были контрактом, который вы должны выполнить, и это очень простая и чистая концепция. Теперь это …

3
Как называется функция, которая не принимает аргументов и ничего не возвращает? [закрыто]
В java.util.functionпакете Java 8 мы имеем: Функция : принимает один аргумент, выдает один результат. Потребитель : принимает один аргумент, ничего не производит. Поставщик : не принимает аргументов, дает один результат. ... : другие случаи обработки примитивов, двух аргументов и т. Д. Но мне нужно разобраться с делом «не принимает аргументов, …

3
Почему в классах Java 8 java.time отсутствует метод getMillis ()?
Java 8 имеет совершенно новую библиотеку для дат и времени в пакете java.time, что очень приветствуется для всех, кому раньше приходилось использовать JodaTime или из-за необходимости создавать собственные вспомогательные методы обработки дат. Многие классы в этом пакете представляют временные метки и имеют вспомогательные методы, такие как getHour()получение часов из временной …
64 java  java8 

3
Есть ли выигрыш в производительности при использовании ссылочного синтаксиса метода вместо лямбда-синтаксиса в Java 8?
Пропускают ли ссылки на методы накладные расходы на лямбда-оболочку? Могут ли они в будущем? Согласно Учебному руководству по Java о методах : Иногда ... лямбда-выражение делает только вызов существующего метода. В этих случаях часто проще обратиться к существующему методу по имени. Ссылки на методы позволяют вам сделать это; это компактные, …

6
Обходной путь для проверенных исключений Java
Я высоко ценю новые функции Java 8, касающиеся лямбд и интерфейсов методов по умолчанию. Тем не менее, я все еще скучаю с проверенными исключениями. Например, если я просто хочу перечислить все видимые поля объекта, я хотел бы просто написать это: Arrays.asList(p.getClass().getFields()).forEach( f -> System.out.println(f.get(p)) ); Тем не менее, поскольку getметод …

3
Почему я должен использовать «функциональные операции» вместо цикла for?
for (Canvas canvas : list) { } NetBeans предлагает мне использовать «функциональные операции»: list.stream().forEach((canvas) -> { }); Но почему это предпочтительнее ? Во всяком случае, труднее читать и понимать. Вы звоните stream(), затем forEach()используете лямбда-выражение с параметром canvas. Я не вижу, как это лучше, чем forцикл в первом фрагменте. Очевидно, …

3
Это антипаттерн, чтобы использовать peek () для изменения элемента потока?
Предположим, у меня есть поток вещей, и я хочу «обогатить» их серединой потока, я могу использовать peek()это, например: streamOfThings.peek(this::thingMutator).forEach(this::someConsumer); Предположим, что изменение объектов в этой точке в коде является правильным поведением - например, thingMutatorметод может установить в поле «lastProcessed» текущее время. Однако peek()в большинстве случаев означает «смотри, но не трогай». …

1
Вывод типа в Java 8
Собирается ли введение новой лямбда-нотации (см., Например, эту статью ) в Java 8 какого-либо вывода типа? Если да, то как новая система типов повлияет на язык Java в целом?

9
Почему используется необязательная преференция для проверки нуля переменной?
Возьмите два примера кода: if(optional.isPresent()) { //do your thing } if(variable != null) { //do your thing } Насколько я могу судить, самое очевидное отличие состоит в том, что Optional требует создания дополнительного объекта. Тем не менее, многие люди начали быстро принимать дополнительные. В чем преимущество использования опций по сравнению …
25 java  java8 

3
Почему Optional.get () без вызова isPresent () плох, а не iterator.next ()?
При использовании нового Java8 streams api для поиска одного конкретного элемента в коллекции я пишу такой код: String theFirstString = myCollection.stream() .findFirst() .get(); Здесь IntelliJ предупреждает, что get () вызывается без предварительной проверки isPresent (). Тем не менее, этот код: String theFirstString = myCollection.iterator().next(); ... не дает предупреждения. Есть ли …
23 java8 

1
Имеет ли смысл измерять условное покрытие для кода Java 8?
Мне интересно, не устарели ли измерения покрытия условного кода текущими инструментами для Java после появления Java 8? С Java 8 - х Optionalи Streamчасто мы можем избежать кода ветвь / петлю, что делает его легко получить очень высокое условное покрытие без проверки всех возможных путей выполнения. Давайте сравним старый код …

3
Разумно ли возвращать потоки везде, где мы обычно возвращаем коллекции?
Разрабатывая мой API, который не привязан к какому-либо устаревшему коду, я часто нахожу себя пишущим методы, которые являются чисто конвейерными потоками и заканчиваются сбором результатов. Как этот: ImmutableSet<T> deriveSomethingMeaningfulFromPrivateState() { return myPrivateThingies.stream() .map(this::ownerOfThing) .map(Owner::socialStatus) .filter(SocialStatus::isHeAFineMatey) .collect(MyCustomCollectors.toImmutableSet()); } Теперь большинству клиентов этого класса обычно требуется Collection (в данном случае ImmutableSet) для …

1
Передача функции Scala в метод Java 8
Следующий код Scala работает и может быть передан методу Java, ожидающему функцию. Есть ли более чистый способ сделать это? Вот мой первый проход: val plusOne = new java.util.function.Function[Int,Int] { override def apply(t:Int):Int = t + 1 override def andThen[V](after:function.Function[_ >: Int, _ <: V]): function.Function[Int, V] = ??? override def …

1
Является ли Collection.stream (). Filter (). ForEach () неэффективным по сравнению со стандартом для каждого цикла?
IntelliJ IDEA только что порекомендовал мне заменить следующий цикл for-each на вызов Java 8 forEach: for (Object o : objects) { if (o instanceof SomeObject) { doSomething(); } } Рекомендуемый вызов будет выглядеть так: objects.stream().filter(o -> o instanceof SomeObject).forEach(o -> doSomething()); Если я не понимаю, как работает базовая функциональность Stream, …

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.