在Java 8中,Stream有一个reduce方法:
假设一下,如果
我认为不行,但我也想要一个例子来说明这种干扰会引起什么问题。
T reduce(T identity, BinaryOperator<T> accumulator);
累加器运算符是否允许修改其任一参数?我认为不允许,因为JavaDoc称累加器应该是非干扰性的,尽管所有示例都在谈论修改集合而不是修改集合中的元素。
因此,以一个具体的例子来说,如果我们有:
integers.reduce(0, Integer::sum);
假设一下,如果
Integer
是可变的,那么 sum
能否通过将第二个参数的值加到第一个参数上(原地修改)来修改它的第一个参数呢?我认为不行,但我也想要一个例子来说明这种干扰会引起什么问题。
reduce
方法没有提供identity
,似乎一个可变的累加器就可以产生良好的结果,即使在并行运行时也是如此。我知道这不是一个好的实践,但它似乎“有效”。 - assyliascollect
并不是那么复杂。我猜你可以像这样做:stream.collect(MutableInteger::new, MutableInteger::add, MutableInteger::add)。 - Graeme Mosscollect
еҝ…йЎ»и°ғз”ЁдёҖдёӘе…·жңүдёҖдёӘе…ғзҙ зҡ„Streamзҡ„дҫӣеә”е•ҶгҖӮеӣ жӯӨпјҢеҰӮжһңе…Ғи®ёеҸҳејӮпјҢжҲ‘并дёҚи®Өдёәе®ғеҸҜд»Ҙжӣҝд»ЈдҪҝз”ЁеҚ•еҸӮж•°reduceж–№жі•жүҖиғҪеҒҡзҡ„дәӢжғ…гҖӮ - Ed Thomas