如何在Xtend模板中实现指定Java while循环的等效遍历功能
Xtend模板实现倒序步长2遍历的可行方案
Xtend模板的«FOR»语法仅支持迭代Iterable类型对象,不支持原生Java风格的三段式for循环和while循环输出逻辑,可以通过以下两种方案实现等效功能:
方案1:使用内置扩展方法生成索引序列(推荐)
Xtend为数值类型提供了downto扩展方法,可以直接生成指定范围、指定步长的倒序索引序列,直接迭代该序列即可,逻辑和原Java代码完全一致:
«FOR index : (refin.size - 1).downto(1, 2)» «refin.get(index)»::=«refin.get(index - 1)» «ENDFOR»
参数说明:
- 起始值为
refin.size -1,对应原代码的初始索引 - 结束值为
1,对应原循环的index>0终止条件 - 步长为
2,对应原代码的index -=2逻辑
方案2:提前构造遍历索引集合
如果使用的Xtend版本不支持带步长的downto方法,可以先在模板变量定义块中使用while逻辑构造需要遍历的索引集合,再迭代该集合输出:
// 模板头部先构造索引集合 «val traversalIndexes = new ArrayList var tempIndex = refin.size - 1 while (tempIndex > 0) { traversalIndexes.add(tempIndex) tempIndex -= 2 }» // 迭代输出 «FOR index : traversalIndexes» «refin.get(index)»::=«refin.get(index - 1)» «ENDFOR»
内容的提问来源于stack exchange,提问作者programming_QA
相关产品推荐
相关产品推荐

