Потоковый аспект этого не имеет отношения к вопросу; давайте удалим это:
trade -> Trade.newBuilder()
.setType(trade.type())
.setUnit(trade.unit())
.setCounterParty(trade.counterParty())
.build()
Вы просите не устанавливать counterParty
, если оно равно нулю.
Очень простой способ сделать это - изменить класс строителя setCounterParty()
ничего не делать и вернуть, если параметр имеет значение null.
TradeBuilder setCounterParty(CounterParty cp) {
if(cp != null) {
this.counterParty = cp;
}
return this;
}
Вам необходимо убедиться, что это поведение соответствует потребностям других вызывающих абонентов.
Если ваш построитель работает динамически сгенерированный неким фреймворком (Lombok et c), у вас может не быть кода, в котором вы можете легко внести это изменение, - но большинство таких фреймворков имеют механизмы, позволяющие вам контролировать подобные вещи.
Если вы не можете изменить конструктор, вы можете прервать вызовы на него и окружить один вызов if
:
trade -> {
TradeBuilder b = Trade.newBuilder()
.setType(trade.type())
.setUnit(trade.unit());
if(trade.counterParty() != null) {
b.setCounterParty(trade.counterParty());
}
return b.build()
}