重构foreach to for循环

Tho*_*ler 6 java eclipse automated-refactoring

我有一个Java的foreach循环(这里是简化版)

List<String> names = getNames();
for(String name:names) {
    doSomething(name);
}
Run Code Online (Sandbox Code Playgroud)

有没有一种自动方式将其重构为传统for循环?

我知道如何手动完成

List<String> names = getNames();
for(int i=0; i<names.size(); i++) {
    String name = names.get(i);
    doSomething(name);
}
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,for语句本身需要进行一些输入,并name再次引入变量并为其赋值names.get(i).总的来说,手动编辑对我来说太容易出错了.

我为什么要这样做?我必须修复一个错误,修复是从索引1开始而不是索引0并在索引n-1结束而不是结束(遗憾的是我无法立即修复输入,我需要等待库更新如果那被认为是一个bug).

我试过了什么?我右键单击for关键字并单击"重构",但据我可以从上下文菜单条目中获取,没有任何内容可以为我完成工作.

为什么我认为这在理论上可行?因为Resharper for Visual Studio(C#)中存在类似的功能.

仅供参考:我正在使用Eclipse Luna SR 2(4.4.2)

Mas*_*imo 10

将鼠标悬停在for语句上,右键单击,快速修复(Ctrl+ 1),转换为索引循环.

应该管用!


JB *_*zet 7

List<String> names = getNames();
names = names.subList(1, names.size() - 1);
for(String name : names) {
    doSomething(name);
}
Run Code Online (Sandbox Code Playgroud)

当然,如果您需要多次执行此操作,可以将其置于可重用的方法中:

public static List<String> fixList(List<String> names) {
    return names.subList(1, names.size() - 1);
}
Run Code Online (Sandbox Code Playgroud)

然后用它作为

List<String> names = fixList(getNames());
for(String name : names) {
    doSomething(name);
}
Run Code Online (Sandbox Code Playgroud)


Mar*_*vin 6

在我的eclipse(Kepler RC2)中,它可以选择for关键字并使用上下文菜单中的快速修复或按快捷键CTRL+ 1.Eclipse然后为我提供"转换为索引"为'循环'或"转换为基于迭代器"为'循环'.

快速修复选项的屏幕截图