Java 8增强了带有索引/范围的循环

try*_*arn 6 java apache-commons java-8

是否可以在Java中的for循环中指定索引/范围?

例如,我有一个列表: List<String> list;

我想从索引1而不是0运行一个for循环:

for(String s : list(start from index 1))
Run Code Online (Sandbox Code Playgroud)

或直到索引5

for(String s : list(end at index 5))
Run Code Online (Sandbox Code Playgroud)

我知道我可以使用传统的for循环,也可以在增强的for循环中保留一个计数器,但是我想知道Java或apache集合中是否有一些现成的东西?

ern*_*t_k 16

我将subList在这种情况下使用:

for(String s : list.subList(1, list.size()))
Run Code Online (Sandbox Code Playgroud)

for(String s : list.subList(0, 6))
Run Code Online (Sandbox Code Playgroud)


Had*_*i J 9

使用of sublist更好,但流版本使用skipand limit

list.stream().skip(1) .... limit(6)..... 
Run Code Online (Sandbox Code Playgroud)


Era*_*ran 5

传统的 for 循环是针对此需求的“开箱即用”解决方案:

for (int i = 1; i < list.size(); i++) {
    String s = list.get(i);
    ...
}
Run Code Online (Sandbox Code Playgroud)

和(如果List至少有 5 个元素):

for (int i = 0; i < 5; i++) {
    String s = list.get(i);
    ...
}
Run Code Online (Sandbox Code Playgroud)


BSe*_*zin 5

在Java 8中,我们具有Stream API,可用于通过自定义索引遍历List:

List<String> evenIndexes = IntStream
  .range(0, names.length)
  .filter(i -> i % 2 == 0)
  .mapToObj(i -> names[i])
  .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

在该range方法中,您可以从1开始,和/或迭代到5。