JEP286-在增强的for循环中使用索引

问题描述 投票:1回答:2

我在下面的Open JDK链接中阅读了有关本地变量类型推断的文档。

http://openjdk.java.net/jeps/286

有一件事引起了我的注意-“ 增强的for循环中的索引”。我查了一下,看不到讨论了增强for循环的索引。到目前为止,我的理解是只能在传统的for循环中使用索引(显然,我缺少某些内容)。

您能否提供一些在增强的for循环中使用索引的示例?

目标

我们致力于通过减少仪式来改善开发者体验与编写Java代码相关联,同时保持Java的承诺通过允许开发人员消除通常不需要的局部变量类型的清单声明。这个该功能将允许例如以下声明:

var list = new ArrayList<String>();  // infers ArrayList<String>
var stream = list.stream();          // infers Stream<String>

此处理将仅限于带有初始值设定项,增强型for循环中的索引和在传统的for循环;它不适用于方法形式,构造函数形式,方法返回类型,字段,捕获形式,或任何其他类型的变量声明。

java java-10 local-variable-type-inference
2个回答
1
投票

这是指随增强的for循环声明的变量,例如:

var elements = new Arraylist<String>();
// Fill the list
for (var element : elements) {
    // element is type String
}

0
投票

如果您进一步查看同一文档中链接的style guidelines,则可以在“示例”下找到带有局部变量的迭代器,例如:

void removeMatches(Map<? extends String, ? extends Number> map, int max) {
    for (var iterator = map.entrySet().iterator(); iterator.hasNext(); ) {
        var entry = iterator.next();
        if (max > 0 && matches(entry)) {
            iterator.remove();
            max--;
        }
    }
}

此外,对于索引部分,您还可以执行类似的操作:

void removeMatchesIndexes(List<? extends Number> list, int max) {
    for (var i = 0; i < list.size(); i++) {
        var entry = list.get(i);
        if (entry.intValue() > max) {
            list.remove(entry);
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.