java for index_Java增强for循环中获取index

前提测试数据:

String[] data = new String[]{"rensanning001", "rensanning002", "rensanning003"};

List dataList = Arrays.asList(data);

普通的For循环:

for (int i = 0; i < dataList.size(); i++) {

System.out.println(i + ":" + dataList.get(i));

}

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

int i = 0;

for (String elem : dataList) {

System.out.println(i + ":" + elem);

i++;

}

自定义静态方法实现带index的循环:

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

}

};

}

};

}

}

扩展Iterable实现带index的循环:

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

}

};

}

}

jquery风格的for循环:

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;

}

}

下载次数: 4

分享到:

18e900b8666ce6f233d25ec02f95ee59.png

72dd548719f0ace4d5f9bca64e1d7715.png

2014-01-13 11:02

浏览 47198

评论

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值