首页 > 解决方案 > 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--) {
  ...
 }
}

有没有办法使用迭代器在这里合并循环逻辑,所以我只有一个方法?我仍然需要跟踪索引。

标签: javaarraylistforeachiterator

解决方案


在 java-8 中,您可以使用IntStream.iterateStream.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.iterateStream.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);

推荐阅读