hg: lambda/lambda/jdk: Implement groupBy for both ordered and unordered sources
Brian Goetz
brian.goetz at oracle.com
Tue Oct 23 13:54:55 PDT 2012
Good catch. The null check here is cheap but the formatting is not, and
given that this is on a hot code path, probably should be adjusted to
use a static error message or inline the requireNonNull logic.
Unfortunately simply overloading Objects.requireNonNull with a version
taking a Factory<String> would, while cheaper than formatting
preemptively, not be as cheap as you think it is. That's because its
likely that the lambda would capture something, and still create an
object to wrap the captured values. Cheaper but not zero. (The same
issue comes up in the Logger API.) We're working on some VM magic to
reduce the cost here but that may take some time to fully coalesce. The
varargs version has the same issues (worse if there are primitives,
since that would be multiple boxings plus an array boxing.)
On 10/23/2012 4:48 PM, Arne Siegel wrote:
> This excerpt from GroupByOpcries for a new overloaded requireNonNull in
> class Objects, as formatting an instance of an unknown type may be quite
> expensive:
>
> public void accept(T t) {
> K key = Objects.requireNonNull(mapper.map(t),
> String.format("The element %s cannot be mapped to a null key", t));
>
> Two simple solutions come to mind: adding a Factory<String> parameter,
> or adding a Object... parameter and moving the format into requireNonNull.
>
> Arne Siegel
>
> On 22 Oct 2012 at 21:05, brian.goetz at oracle.com wrote:
>
>> Changeset: 532efd9be743
>> Author: briangoetz
>> Date: 2012-10-22 17:04 -0400
>> URL: http://hg.openjdk.java.net/lambda/lambda/jdk/rev/532efd9be743
>>
>> Implement groupBy for both ordered and unordered sources
>> Contributed-By: paul.sandoz at oracle.com
>>
>> + src/share/classes/java/util/streams/ops/FlagDeclaringOp.java
>> ! src/share/classes/java/util/streams/ops/GroupByOp.java
>> ! test-ng/tests/org/openjdk/tests/java/util/streams/ops/GroupByOpTest.java
>> ! test-ng/tests/org/openjdk/tests/java/util/streams/ops/StreamOpTestCase.java
>>
>>
>
More information about the lambda-dev
mailing list