Java增强for循环中获取index

[b]前提测试数据:[/b]

String[] data = new String[]{"rensanning001", "rensanning002", "rensanning003"};
List dataList = Arrays.asList(data);


[b]普通的For循环:[/b]

for (int i = 0; i < dataList.size(); i++) {
System.out.println(i + ":" + dataList.get(i));
}


[b]增强For循环(获取index需要定义额外的变量):[/b]

int i = 0;
for (String elem : dataList) {
System.out.println(i + ":" + elem);
i++;
}


[b]自定义静态方法实现带index的循环:[/b]

for (Indexer elem : ExtFor1.loop(dataList)) {
System.out.println(elem.index() + ":" + elem.value());
}


public class ExtFor1 {

public static Iterable> loop(final Iterable list) {
return new Iterable>() {
@Override
public Iterator> iterator() {
return new Iterator>() {
private int counter = 0;
private Iterator iterator = list.iterator();

@Override
public boolean hasNext() {
return iterator.hasNext();
}

@Override
public Indexer next() {
Indexer elem = new Indexer(counter++, iterator.next());
return elem;
}

@Override
public void remove() {
throw new RuntimeException();
}
};
}
};
}

}


[b]扩展Iterable实现带index的循环:[/b]

for (Indexer elem : ExtFor2.loop(dataList)) {
System.out.println(elem.index() + ":" + elem.value());
}


public class ExtFor2 implements Iterable> {
private Iterator iterator;

private ExtFor2(Iterable iter) {
this.iterator = iter.iterator();
}

public static ExtFor2 loop(Iterable iter) {
return new ExtFor2(iter);
}

@Override
public Iterator> iterator() {
return new Iterator>() {
private int counter = 0;

@Override
public boolean hasNext() {
return iterator.hasNext();
}

@Override
public Indexer next() {
Indexer elem = new Indexer(counter++, iterator.next());
return elem;
}

@Override
public void remove() {
throw new RuntimeException();
}
};
}

}


[b]jquery风格的for循环:[/b]

For.each(dataList, new For.Function() {
public void execute(int index, String elem) {
System.out.println(index + ":" + elem);
}
});


public class For {

public static void each(List list, Function function) {
int length = list.size();
for (int index = 0; index < length; index++) {
function.execute(index, list.get(index));
}
}

public static interface Function {
public void execute(int index, T obj);
}
}



public class Indexer {
private final int index;
private final T value;

public Indexer(int index, T value) {
this.index = index;
this.value = value;
}

public int index() {
return this.index;
}

public T value() {
return this.value;
}
}

你可能感兴趣的:(Java)