开发者社区> 问答> 正文

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

我在下面的Open JDK链接中阅读了有关Local-Variable Type Inference的文档。

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循环中声明的局部变量;它不适用于方法形式,构造函数形式,方法返回类型,字段,catch形式或任何其他类型的变量声明。

问题来源:Stack Overflow

展开
收起
montos 2020-03-25 21:49:24 506 0
1 条回答
写回答
取消 提交回答
  • 如果您进一步查看同一文档中链接的样式指南,则可以在“示例”下找到带有局部变量的迭代器,例如:

    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);
            }
        }
    }
    

    回答来源:Stack Overflow

    2020-03-25 21:50:00
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载