Collectors.LongStatistics Min/Max Values
Paul Sandoz
paul.sandoz at oracle.com
Fri Mar 1 01:23:02 PST 2013
On Feb 28, 2013, at 11:49 PM, Niels Nonsense <niels.nwx at gmail.com> wrote:
> The accept method of LongStatistics should be rewritten as:
> @Override
> public void accept(long value) {
> sum += value;
> min = count == 0 ? value : Math.min(min, value);
> max = Math.max(max, value);
> ++count;
> }
> Similar for combine and the other primitives.
>
A simpler approach is to initialize min to Long.MAX_VALUE and max to Long.MIN_VALUE and the min/max methods should return OptionalLong:
public OptionalLong getMin() {
return count > 0 ? OptionalLong.of(min) : OptionalLong.empty();
}
to be consistent with the stream min/max methods.
For DoubleStatistics i think the initial min and max values can be Double.POSITIVE_INFINITY and Double.NEGATIVE_INFINITY respectively. We should also think about what it means if a NaN is present. We could state the behaviour uses the same rules as Math.min/max, which means if a Nan is present then NaN will be returned.
Paul.
> 2013/2/28 Robert J. Saulnier <robert.j.saulnier at gmail.com>
>
>> I'm guessing this was already discussed.
>>
>> Why does the following print "min=0" instead of "min=1"?
>>
>> List<Long> nums = Arrays.asList(1L, 2L, 3L);
>>
>> Collectors.LongStatistics stats =
>> nums.stream().collect(Collectors.toLongStatistics());
>>
>> System.out.println("min=" + stats.getMin());
>>
>> Same issue with max if all the numbers are negative.
>>
>>
>
More information about the lambda-dev
mailing list