Java 我无法理解高级For循环是如何工作的

Java 我无法理解高级For循环是如何工作的,java,for-loop,ternary-operator,Java,For Loop,Ternary Operator,我了解到,Advanced_For_循环可以接受两个表达式。 当它有三个时,我不知道它是如何工作的。我的意思是:for(expression1:expression2:expression3)。 我不知道它是如何在这段代码中迭代的 private Sheet fieldVsTime(Workbook wb, String _title,List<PivotField> _pivots, List<PivotField> _all,boolean _period

我了解到,Advanced_For_循环可以接受两个表达式。 当它有三个时,我不知道它是如何工作的。我的意思是:for(expression1:expression2:expression3)。 我不知道它是如何在这段代码中迭代的

   private Sheet fieldVsTime(Workbook wb, String _title,List<PivotField>
   _pivots, List<PivotField> _all,boolean _periods,Map<String, String> 
   _yAxesMapping) {

    for (PivotField pivot : _all == null ? _pivots : _all) {
        List<PivotField> list = pivot.getPivot();
        if (list != null) {
            for (PivotField pivotField : list) {
                int publishDate = Integer.parseInt(pivotField.getValue().toString());
                if (_periods) {
                    publishDate = (publishDate / 10) * 10;
                }
                if (publishDate < minYear) {
                    minYear = publishDate;
                }
                if (publishDate > maxYear) {
                    maxYear = publishDate;
                }
            }
        }
    }
private Sheet fieldVsTime(工作簿wb,字符串\u标题,列表
_数据透视、列表、布尔句点、映射
_yAxesMapping){
对于(数据透视字段透视:_all==null?_透视:_all){
List=pivot.getPivot();
如果(列表!=null){
用于(数据透视字段数据透视字段:列表){
int publishDate=Integer.parseInt(pivotField.getValue().toString());
如果(_期间){
publishDate=(publishDate/10)*10;
}
如果(出版日期<年){
minYear=出版日期;
}
如果(publishDate>maxYear){
maxYear=出版日期;
}
}
}
}

它只有两个表达式:

for (PivotField pivot : (_all == null ? _pivots : _all))
     ----------------   -------------------------------
            1                       2

第二个表达式
(\u all==null?\u pivots:\u all)
返回
\u pivots
\u all
,具体取决于
\u all==null
是否等效于此代码:

List<PivotField> pivotFields;
if( _all == null ) {
    pivotFields = _pivots;
}
else {
    pivotFields = _all;
}

for (PivotField pivot : pivotFields) {
    ...
}
列出数据透视字段;
如果(_all==null){
数据透视字段=_数据透视;
}
否则{
数据透视字段=_all;
}
用于(数据透视字段透视:数据透视字段){
...
}

看看
?:
三元运算符。对于循环,增强的
,而不是针对
循环的高级
。我希望基于范围的for循环,也称为foreach循环,不是通俗地称为“增强的”for loop。它只针对1.5 Java之前的版本进行了增强。它的增强是因为它现在有两个语法,而不是一个。我不认为一个语法比另一个语法更强大。