enhanced for loop with multiple iteration variables
Remi Forax
forax at univ-mlv.fr
Tue Jan 1 19:16:06 UTC 2019
----- Mail original -----
> De: "Alan Snyder" <javalists at cbfiddle.com>
> À: "Brian Goetz" <brian.goetz at oracle.com>
> Cc: "core-libs-dev" <core-libs-dev at openjdk.java.net>
> Envoyé: Vendredi 21 Décembre 2018 03:19:14
> Objet: Re: enhanced for loop with multiple iteration variables
> RIght, but I don’t see that as a general solution.
>
> Its also a bit kludgy, like saying that methods need only one parameter because
> you can always pass a data object.
yes, that's the point, as part of Valhalla, we want to introduce value types in Java.
A value type is an almost zero cost abstraction that let you group and ungroup values.
Also as part of Amber, we want to be able to de-construct record types (product types) in order to support pattern matching.
If we have value types and de-construction, we are not far be able to write something like:
for((var key, var value): map.entrySet()) {
// ...
}
with no runtime cost.
So being able to use the enhanced for loop on tuples is clearly something we want to have, but to achieve that goal i don't think that introducing a new Iterator2 interface is the right way to do that.
regards,
Rémi
>
>> On Dec 20, 2018, at 2:50 PM, Brian Goetz <brian.goetz at oracle.com> wrote:
>>
>> For Map, you can do:
>>
>> for (Map.Entry<K,V> e : map.entrySet()) { ... }
>>
>> and you're already there.
>>
>>
>>
>> On 12/19/2018 9:54 AM, Alan Snyder wrote:
>>> Has any consideration been given to supporting iterators that provide more than
>>> one iteration variable in the enhanced for loop?
>>>
>>> Obvious uses would be maps (keys and values) and lists (indexes and values).
>>>
>>> I have in mind keeping the syntactic sugar approach by using one or more
>>> extensions of the Iterator/Iterable interfaces, such as, for example:
>>>
>>> interface Iterator2<E1,E2> extends Iterator<E1> {
>>> E2 get2();
>>> }
>>>
>>> with the extra methods providing the values for the extra variables (associated
>>> with the previous call to next).
>>>
>>> Extending interfaces is not required, but it makes the trailing variables
>>> optional, which might be useful. For example, the same iterator could provide
>>> values or values and keys.
>>>
>>> The fact that this approach only works for a fixed set of numbers of variables
>>> does not bother me unduly.
>>>
>>> Alan
>>>
More information about the core-libs-dev
mailing list