#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 Соответственной проверялся код из вопроса с несколькими вариантами: с ненулевым объектом и ненулевым полем объекта с ненулевым объектом и нулевым полем объекта с нулевым объектом О результатах судить не стану, дабы не развивать холивар.
Комментариев нет:
Отправить комментарий