Java 8增強了帶有索引/範圍的循環




java-8 apache-commons (5)

是否可以在Java中的for循環中指定索引/範圍?

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

我想從索引1而不是0運行一個for循環:

for(String s : list(start from index 1))

或直到索引5

for(String s : list(end at index 5))

我知道我可以使用傳統的for循環,也可以在增強的for循環中保留一個計數器,但是我想知道Java或apache集合中是否有某些可用的東西?


傳統的for循環是針對此要求的“開箱即用”解決方案:

for (int i = 1; i < list.size(); i++) {
    String s = list.get(i);
    ...
}

並且(如果 List 中至少包含5個元素):

for (int i = 0; i < 5; i++) {
    String s = list.get(i);
    ...
}

在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());

range 方法中,您可以從1開始,和/或迭代到5。


我不確定性能會受到影響,但是您可以使用 List::subList

List<String> list = Arrays.asList("a", "b", "c");

for (String s : list.subList(1, list.size())) {
        System.out.println(s);
}

輸出

2
3

雖然使用 sublist 更好,但是流版本使用 skiplimit

list.stream().skip(1) .... limit(6)..... 

你可以用

for(int i=1 ; i< list.size ; i++){
   String str = list.get(i);
}






apache-commons