когда я просматривал какой-то код, я наткнулся на этот фрагмент.
List<User> users = /* Some code that initializes the list */;
users.stream()
.filter(user -> user.getAddress().isPresent())
.map(/* Some code */)
// And so on...
Вызов метода user.getAddress()
возвращает Optional<Address>
. Следуя известному закону Деметры (LoD), приведенный выше код не является чистым. Однако я не могу понять, как реорганизовать его, чтобы сделать его чище.
В качестве первой попытки можно было бы добавить к классу User
метод hasAddress()
, но этот метод преодолевает необходимость наличия Optional<Address>
, ИМО.
Как мне реорганизовать приведенный выше код? В таком случае стоит ли удовлетворять LoD?
EDIT: я пропустил указание, что в методе map
я не хочу возвращать адрес.
user
, сделайте это. Глубина всего 2, а неuser.getAddress().getThing().getThong().getThother().getThomethingElthe()
. Если бы это было последнее, я бы беспокоился; как есть, просто иди с тем, что у тебя есть. - person Andy Turner   schedule 17.11.2017user
, которое говоритisAddressPresent
, но это кажется излишним... - person Nir Alfasi   schedule 17.11.2017User
как простую структуру данных, а не как правильный объект с некоторым поведением. - person matteobarbieri   schedule 17.11.2017map
. Но если единственная причина, по которой вы выставляетеaddress
, состоит в том, чтобы проверить, присутствует ли он, я бы выбралhasAddress
- person matteobarbieri   schedule 17.11.2017