#java #производительность #optional
С введением в Java 8 новой конструкции Optional у меня возникли разногласия с коллегами
по поводу скорости работы Optional vs if-else vs тернарный оператор. Несколько примеров:
Java 8:
return Optional.ofNullable(user)
.map(User::getUserSurname)
.orElse("None");
Старый добрый вариант:
if (user != null && user.getUserSurname() != null) {
return user.getUserSurname();
}
return "None";
Тернарный вариант:
return (user != null && user.getUserSurname() != null) ?
user.getUserSurname() : "None"
P.S. Интересно было бы проверить и для более глубокой вложенности
return Optional.ofNullable(user)
.map(User::getUserDetails())
.map(User::getUserSurname())
.orElse("None");
Ответы
Ответ 1
На самом деле лаконичней код или нет - личное дело каждого. Решающее значение обычно имеет производительность (если, конечно, это важно для проекта). По поводу производительности могу привести следующие результаты: Benchmark Mode Cnt Score Error Units MyBenchmark.ifElse avgt 200 2.717 ± 0.036 ns/op MyBenchmark.ifElseNullField avgt 200 2.733 ± 0.045 ns/op MyBenchmark.ifElseNullObject avgt 200 2.789 ± 0.025 ns/op MyBenchmark.optional avgt 200 3.020 ± 0.042 ns/op MyBenchmark.optionalNullField avgt 200 5.570 ± 0.069 ns/op MyBenchmark.optionalNullObject avgt 200 2.936 ± 0.060 ns/op Соответственной проверялся код из вопроса с несколькими вариантами: с ненулевым объектом и ненулевым полем объекта с ненулевым объектом и нулевым полем объекта с нулевым объектом О результатах судить не стану, дабы не развивать холивар.
Комментариев нет:
Отправить комментарий