2016-04-30 9 views
0

Ich habe eine List<BigInteger> listBigInt. Einige der Artikel sind null einige sind nicht.
Ich möchte alle Elemente (mit Ausnahme der null Werte) mit fünf multipliziert und summiert mit Java8 Streams.
Bisher fugured ich dieses Konstrukt aus:Handhabung null BigDecimals in java8 Streams

BigDecimal sum = listBigInt.stream() 
    .map(c -> (c == null ? BigDecimal.ZERO : c).multiply(new BigDecimal(5))) 
    .reduce(BigDecimal::add).get(); 

Gibt es elegantere Art und Weise null-Werte zu vermeiden?

Antwort

1

Sie können etwas mehr Geschwindigkeit gewinnen, indem die letzten:

BigDecimal sum = listBigInt.stream() 
    .filter(c -> c != null) 
    .reduce(BigDecimal::add) 
    .get() 
    .multiply(new BigDecimal(5)); 
1

Eigentlich ein möglicher Weg ist es, einen Filter vor dem Mapping, da dies zu nutzen:

BigDecimal sum = listBigInt.stream() 
    .filter(c -> c != null) 
    .map(c -> c.multiply(new BigDecimal(5))) 
    .reduce(BigDecimal::add).get();