在同时处理2个元素的同时迭代列表的最佳方法是什么?
例:
List<String> strings = Arrays.asList("item 1", "item 2", "item 3", "item 4");
for(int i = 0; i < strings.size(); i++){
String first = strings.get(i);
String second = null;
if(strings.size() > i + 1){
second = strings.get(i + 1);
}
System.out.println("First [" + first + "] - Second [" + second + "]");
}
Run Code Online (Sandbox Code Playgroud)
结果是:
First [item 1] - Second [item 2]
First [item 2] - Second [item 3]
First [item 3] - Second [item 4]
First [item 4] - Second [null]
Run Code Online (Sandbox Code Playgroud)
我想实现:
First [item 1] - Second [item 2]
First [item 3] - Second [item 4]
Run Code Online (Sandbox Code Playgroud)
hyd*_*yde 13
只增加i2:
for(int i = 0; i < strings.size(); i += 2) {
Run Code Online (Sandbox Code Playgroud)
您需要修改和增加i第二个值,修改语句:
second = strings.get(i + 1);
Run Code Online (Sandbox Code Playgroud)
至
second = strings.get(++i);
Run Code Online (Sandbox Code Playgroud)
这也将增加i,因为这似乎是期望的行为.
所以你的代码是:
List<String> strings = Arrays.asList("item 1", "item 2", "item 3", "item 4");
for(int i = 0; i < strings.size(); i++){
String first = strings.get(i);
String second = null;
if(strings.size() > i + 1){
second = strings.get(++i); //Change here
}
System.out.println("First [" + first + "] - Second [" + second + "]");
}
Run Code Online (Sandbox Code Playgroud)
我使用Java8 BiConsumer创建了以下方法:
public static <T> void tupleIterator(Iterable<T> iterable, BiConsumer<T, T> consumer) {
Iterator<T> it = iterable.iterator();
if(!it.hasNext()) return;
T first = it.next();
while(it.hasNext()) {
T next = it.next();
consumer.accept(first, next);
first = next;
}
}
Run Code Online (Sandbox Code Playgroud)
像这样用它:
List<String> myIterable = Arrays.asList("1", "2", "3");
tupleIterator(myIterable, (obj1, obj2) -> {
System.out.println(obj1 + " " + obj2);
});
Run Code Online (Sandbox Code Playgroud)
这将输出:
1 2
2 3
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
27617 次 |
| 最近记录: |