java - Java For循环根据条件递增或递减
问题描述
除了循环索引方向外,我有两种相同的方法。
in 中的循环methodA
期望indexBegin < indexEnd
因此它将 i 从 indexBegin 增加到 indexEnd。
中的循环methodB
期望indexBegin > indexEnd
因此它将 i 从 indexBegin 递减到 indexEnd。
public void methodA(int indexBegin, int indexEnd, List<Double> values) {
for (int i = indexBegin; i <= indexEnd; i++) {
...
}
}
public void methodB(int indexBegin, int indexEnd, List<Double> values) {
for (int i = indexBegin; i >= indexEnd; i--) {
...
}
}
有没有办法使用迭代器在这里合并循环逻辑,所以我只有一个方法?我仍然需要跟踪索引。
解决方案
在 java-8 中,您可以使用IntStream.iterate或Stream.iterate的组合limit
以递增或递减顺序生成序列,因此您可以通过IntStream
作为参数传递一种方法
public void utilMethod(IntStream range, List<Double> values) {
range.forEach(i->i);
}
或者
public void utilMethod(Stream<Integer> range, List<Double> values) {
range.forEach(i->i);
}
例子 :
IntStream.iterate(0,i->i+1).limit(10).forEach(System.out::println);
IntStream.iterate(10,i->i-1).limit(10).forEach(System.out::println);
从 java-9 中,您可以使用重载的 IntStream.iterate或Stream.iterate以递增或递减顺序生成序列
public void utilMethod(IntStream range, List<Double> values) {
range.forEach(i->i);
}
例子
IntStream.iterate(0, i->i<10, i->i+1).forEach(System.out::println);
IntStream.iterate(10, i->i>0, i->i-1).forEach(System.out::println);
推荐阅读
- asp.net-core - 设置 Swagger Json 路径
- ruby - 将 Ruby Gem 添加到 Gemfile 并运行 bundle exec file.rb 后,我仍然收到文件未找到错误
- c++ - 如何在 ozo 中构建具有多个参数的查询?
- javascript - 即使在 html 中重新加载页面后,我应该如何使输入永久化并使输入保持不变?
- html - HTML 背景图像:输入中的 ulr()
- c# - 避免在 app.config (.net 框架) 中使用dependentAssembly
- c# - C# FileSystemWatcher - 多个事件
- php - 摆脱不良字符,但保留所有语言的所有字符
- r - 按疾病分层的每列的 P 值
- javascript - jQuery UI Datepicker - 返回日期、到达和离开