Java 9 and IntSummaryStatistics et al.
Paul Sandoz
paul.sandoz at oracle.com
Wed Mar 29 15:44:11 UTC 2017
> On 29 Mar 2017, at 03:32, Remi Forax <forax at univ-mlv.fr> wrote:
>
> Seems a nice Math exercise.
> if you have the min, the max, the count and the sum, how to re-create an IntSummaryStatistics knowing you can only uses accept ?
>
> What about calling accept() with the min, the max and (count - 2) times the (sum - min - max) / (count - 2) ?
> Obviously, if the remainder is not empty, you have to correct the error.
>
That’s an interesting exercise to reproduce the state, but one has to hold ones nose when doing it :-)
An alternative, if possible, would be to avoid the use of IntSummaryStatistics (and others) and write your own serializable wrappers.
IntStream.summaryStatistics() is implemented as follows:
public final IntSummaryStatistics summaryStatistics() {
return collect(IntSummaryStatistics::new, IntSummaryStatistics::accept,
IntSummaryStatistics::combine);
}
Paul.
> Rémi
>
> ----- Mail original -----
>> De: "Chris Dennis" <chris.w.dennis at gmail.com>
>> À: core-libs-dev at openjdk.java.net
>> Envoyé: Mardi 28 Mars 2017 16:29:14
>> Objet: Java 9 and IntSummaryStatistics et al.
>
>> Hi All,
>>
>> I’m currently working on a project thats attempting to do a lot of heavy lifting
>> work with Java Streams (implementing, extending, adapting, etc). One issue we
>> ran in to is the inflexibility around unmarshalling the IntSummaryStatistics
>> class (and it’s other primitive variations). I had originally decided to not
>> push on this since it had already been filed as a enhancement request and
>> dismissed (JDK-8043747) and since in Java 8 and earlier it wasn’t a huge
>> problem for us as we could use reflection to force the initialization of one of
>> these objects without much issue (modulo SecurityManager usage). In Java 9
>> this starts to get much more unpalatable. I’m left with having to open up
>> parts of the java.base module in order to get to what I need (in classpath mode
>> this looks particularly ugly since I have to open up to ALL-UNNAMED). What I’m
>> trying to do here is get a roadmap in place for how to approach these kinds of
>> problems in a Java ecosystem which is (presumably) moving towards a gradually
>> more strict position on strong encapsulation.
>>
>> Right now code that treats a stream pipeline as anything more complex than a
>> ‘literal’ pipeline of operations through which events are pushed is going to
>> hit this problem - a simple example would be any kind of calculation being
>> performed in advance of stream creation. Right now the lack of interface
>> decoupling here means I have no choice but to ‘brute-force’ all these
>> calculations.
>>
>> Thanks,
>>
>> Chris Dennis
More information about the core-libs-dev
mailing list