Stream<Integer>
etc. have to work with boxed values (Integer
instead of primitive int
) which takes significantly more memory and usually a lot of boxing/unboxing operations (depending on your code). Why only Int/Double/Long
? Just because they were expected to be used most often.
Same applies to OptionalInt
and friends and all the functional interfaces.
For collections (lists/maps/sets) there are many third-party libraries providing primitive specialization for the same reason. Really the problem there is even more acute because with streams you don't (usually; sorted()
is a counter-example) need to store many values in memory.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…