java foreach并行_使用foreach在Java中迭代并行数组的漂亮方法

Sean Adkinso..

9

这是一个有趣的练习.我创建了一个名为ParallelList的对象,它接受可变数量的类型化列表,并且可以遍历每个索引处的值(作为值列表返回):

public class ParallelList implements Iterable> {

private final List> lists;

public ParallelList(List... lists) {

this.lists = new ArrayList>(lists.length);

this.lists.addAll(Arrays.asList(lists));

}

public Iterator> iterator() {

return new Iterator>() {

private int loc = 0;

public boolean hasNext() {

boolean hasNext = false;

for (List list : lists) {

hasNext |= (loc < list.size());

}

return hasNext;

}

public List next() {

List vals = new ArrayList(lists.size());

for (int i=0; i

vals.add(loc < lists.get(i).size() ? lists.get(i).get(loc) : null);

}

loc++;

return vals;

}

public void remove() {

for (List list : lists) {

if (loc < list.size()) {

list.remove(loc);

}

}

}

};

}

}

用法示例:

List list1 = Arrays.asList(new Integer[] {1, 2, 3, 4, 5});

List list2 = Arrays.asList(new Integer[] {6, 7, 8});

ParallelList list = new ParallelList(list1, list2);

for (List ints : list) {

System.out.println(String.format("%s, %s", ints.get(0), ints.get(1)));

}

哪个会打印出来:

1, 6

2, 7

3, 8

4, null

5, null

此对象支持可变长度列表,但显然可以将其修改为更严格.

不幸的是我无法摆脱ParallelList构造函数上的一个编译器警告:A generic array of List is created for varargs parameters,所以如果有人知道如何摆脱它,让我知道:)

`@ SuppressWarnings` ;-) (6认同)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值