ast*_*eri 2 java for-loop initialization
我意识到这不是一个大问题,但我想在我的测试中为代码清洁做到这样的事情.(我也意识到"干净"是主观的,我宁愿不进入代码审查会议,哈哈.)由于某种原因,传统的for循环拒绝允许String作为其中初始化的变量之一.目前,我所编制的内容如下:
Iterator<String> keys = map.keySet().iterator();
String next = null;
for(int i = 0; keys.hasNext(); i++, next = keys.next()) {
//stuff
}
Run Code Online (Sandbox Code Playgroud)
...但是有这样的事情会很好:
for(int i = 0, String next = null; keys.hasNext(); i++, next = keys.next()) {
//stuff
}
Run Code Online (Sandbox Code Playgroud)
我希望这个工作的原因是因为我们可以for使用多个变量来实现这样的循环.
for(int i = 0, j = 0; i < 0 && j < 0; i++, j++) {
// stuff
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,String无论出于何种原因,该版本都会出现编译错 有没有办法可以做到这一点?我只是有一些语法错误吗?如果它是不可能的,是有一个原因?
对于大家谁的沮丧,要认为这是愚蠢的,我之所以需要i,以及该Iterator是JUnit的测试目的.我有一个LinkedHashMap(有序),我需要断言第一个元素= X,第二个元素= Y,第三个元素= Z,依此类推.但keySet()返回只有一个Set不允许你通过索引获取.你只能迭代它.因此,我需要i变量来跟踪我在断言的迭代器中的位置.
该for语句的初始化部分仅接受您声明一种类型的变量.因此,您可以拥有多个声明,但它们必须属于同一类型,并且该类型可以是String.
for (String example = "some string"; example.length() > 0; example = example.substring(1))
System.out.println(example);
Run Code Online (Sandbox Code Playgroud)
或者带有声明列表
for (String example = "some string", another = "woot", someMore = "these too!"; example.length() > 0; example = example.substring(1))
System.out.println(example);
Run Code Online (Sandbox Code Playgroud)