Java 8 增强 for 循环 index/range
Java 8 enhanced for loop with index/range
是否可以在 Java 中的增强 for 循环中指定一个 index/range?
例如我有一个列表:List<String> list;
我想 运行 从索引 1 而不是 0 开始的 for 循环:
for(String s : list(start from index 1))
OR 直到索引 5
for(String s : list(end at index 5))
我知道我可以使用传统的 for 循环或在增强的 for 循环中保留一个计数器,但我想知道 Java 或 apache 集合中是否有开箱即用的东西?
传统的for循环是针对这个需求的"out of the box"解决方案:
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);
...
}
在这种情况下我会使用 subList
:
for(String s : list.subList(1, list.size()))
和
for(String s : list.subList(0, 6))
我不确定性能损失,但你可以使用 List::subList
List<String> list = Arrays.asList("a", "b", "c");
for (String s : list.subList(1, list.size())) {
System.out.println(s);
}
输出
2
3
在 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开始,and/or迭代到5。
使用 sublist
更好,但流版本使用 skip
和 limit
:
list.stream().skip(1) .... limit(6).....
可以使用 list.subList(1, list.size())
,但它会增加子列表的性能损失。在这种情况下最好使用传统的for循环。
//先计算大小以避免每次迭代在循环中计算性能损失
int size = list.size();
for (int i = 1; i < size; i++) {
String s = list.get(i);
...
}
是否可以在 Java 中的增强 for 循环中指定一个 index/range?
例如我有一个列表:List<String> list;
我想 运行 从索引 1 而不是 0 开始的 for 循环:
for(String s : list(start from index 1))
OR 直到索引 5
for(String s : list(end at index 5))
我知道我可以使用传统的 for 循环或在增强的 for 循环中保留一个计数器,但我想知道 Java 或 apache 集合中是否有开箱即用的东西?
传统的for循环是针对这个需求的"out of the box"解决方案:
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);
...
}
在这种情况下我会使用 subList
:
for(String s : list.subList(1, list.size()))
和
for(String s : list.subList(0, 6))
我不确定性能损失,但你可以使用 List::subList
List<String> list = Arrays.asList("a", "b", "c");
for (String s : list.subList(1, list.size())) {
System.out.println(s);
}
输出
2
3
在 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开始,and/or迭代到5。
使用 sublist
更好,但流版本使用 skip
和 limit
:
list.stream().skip(1) .... limit(6).....
可以使用 list.subList(1, list.size())
,但它会增加子列表的性能损失。在这种情况下最好使用传统的for循环。
//先计算大小以避免每次迭代在循环中计算性能损失
int size = list.size();
for (int i = 1; i < size; i++) {
String s = list.get(i);
...
}