Кратко:

  1. Используйте необязательный параметр для возможных нулевых объектов.
  2. Используйте потоки для итерации/фильтрации/сопоставления/сбора данных
  3. Используйте функции/поставщики для повторного использования повторяющегося кода.
  4. Используйте дженерики

Избегайте передачи и сравнения с нулевым значением. Вместо этого используйте необязательный.

Передайте пустые коллекции вместо null. (для них необязательный является дополнительным). (например, Collections.emptyList, Collections.EmptyMap и т. д.)

Используйте поток java 8 для итерации/фильтрации/сопоставления данных.

В следующем примере мы конвертируем список строк в список int, фильтруя отрицательные значения старым (для каждого) и новым (потоковым) способами. Также мы придерживаемся короткого способа инициализации списка Arrays.asList();

Используйте функции/поставщики для выполнения кода в качестве параметра. В следующем примере мы видим, что код почти такой же. Единственная разница в выполняемой функции:

Таким образом, мы можем легко извлечь одну и ту же часть и передать в качестве параметра поставщика только другую часть:

Но что, если нам нужно вернуть какое-то значение, а не просто пустые инструкции? Например:

Так что в таком случае мы можем использовать старые добрые дженерики!

Помните, что элегантный код — это признак профессионализма.