After using the for- templates for a while you can get a feel for when Eclipse is likely to properly infer which variable over which you want to iterate. If it doesn't you can give it a great hint:
e.g.
List list = ... Map map = ... foreach{cursor}
{cursor} represents the cursor. Pressing ctrl-space, what will it infer?
The trick is to make it terribly obvious which variable you want foreach to choose for its completion. For instance, supplying a no-op statement that references an iterable object like this:
List list = ... Map<K,V> map = ... list; foreach{cursor}
will complete as
for (String string : list) { }
You can do really nice things with this like:
List list = ... Map<K,V> map = ... map.values(); foreach{cursor}
Now this doesn't *quite* infer correctly, so use Extract Local Variable (Ctrl-Shift-L) to make map.values a local variable:
List list = ...
Map map = ...
Collection values = map.values();
foreach{cursor}
which gets you
Collection values = map.values();
for (Integer integer : values) {
}
Map map = ...
Collection values = map.values();
foreach{cursor}
which gets you
Collection values = map.values();
for (Integer integer : values) {
}
After that, use the Inline refactoring tool to inline the temporary variables.
for (Integer integer : map.values()) { }
Whee! Extract Local Variable and Inline are your friends.