我有一个对象列表,想要检索所有对象的最小值和最大值并重置此值。我的解决方案是在Object类中有一个方法,它返回值并重置它和Min-Max收集器。因此我的问题是:busInfos
/ collect
是否每个实例都调用一次方法(在本例中为map
方法),或者下面的内容是否会被破坏?
getAndResetValue()
我的有根据的猜测是,这是真的,因为不需要多次调用这些方法,并且必须映射每个Object。但是,由于我没有找到关于此事的确认(甚至在文档中都没有),这个问题。
答案 0 :(得分:5)
虽然当前的Stream API实现仅为每个输入元素调用提供给mapToInt
的函数,但它没有指定,并且规范要求所提供的函数是无状态的,这在您的情况下是错误的。所以我不建议像这样编写代码。另请注意,输入集合可能包含两次相同的对象(例如objects = Arrays.asList(obj, obj)
),在这种情况下,即使使用当前实现,它也会被调用两次。