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