如果 java 流中不为 null,则设置一个值

ser*_*rah 2 java functional-programming java-8 java-stream

当我的交易对手可以是时,我如何null使用 Java 8 处理以下代码中的检查nullcounterParty我只想在它有值时设置,如果它为空则不设置。

 public static Iterable<? extends Trade> buildTrade (final List<Trade> trade) {
    return () -> trade.stream()
                .map(trade -> Trade.newBuilder()
                    .setType(trade.type())              
                    .setUnit(trade.unit())
                    .setCounterParty(trade.counterParty())                  
                    .build())
                .iterator();
    }
Run Code Online (Sandbox Code Playgroud)

And*_*cus 8

您可以使用以下代码:

trade.stream()
            .map(trade -> {
                TradeBuilder tb = Trade.newBuilder()
                    .setType(trade.type())              
                    .setUnit(trade.unit());
                Optional.ofNullable(trade.counterParty())
                    .ifPresent(tb::setCounterParty);
                return tb.build();
             })
            .iterator();
Run Code Online (Sandbox Code Playgroud)

或者没有Optional

trade.stream()
            .map(trade -> {
                TradeBuilder tb = Trade.newBuilder()
                    .setType(trade.type())              
                    .setUnit(trade.unit());
                if(trade.counterParty() != null) tb.setCounterParty(trade.counterParty());
                return tb.build();
             })
            .iterator();
Run Code Online (Sandbox Code Playgroud)