----- Mail original -----
> De: "Alan Snyder" <javali...@cbfiddle.com>
> À: "Brian Goetz" <brian.go...@oracle.com>
> Cc: "core-libs-dev" <core-libs-dev@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.go...@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
>>> 

Reply via email to