添加" .foreach"自定义容器类的功能

时间:2015-06-01 06:07:01

标签: java java-8

我为我的游戏编写了自己的容器类,类似于ArrayList的容器类,但在很多方面有所不同,无论如何我想写一个将遍历支持数组的foreach方法。

我知道我可以使用Arrays.stream但是我很好奇如何编写#foreach方法的自定义lambda实现来迭代数组。

有人有线索吗?感谢

示例:

class Container<T> {
    T[] array = new T[200]; 
}

现在让我们说我想这样做:

Container<Fish> fishies = new Container();
fishies.forEach(fish->System::out);

2 个答案:

答案 0 :(得分:3)

您需要实施类似于forEach类中Stream界面的Container方法:

void forEach(Consumer<? super T> action) 
{
    for (int i = 0; i < array.length; i++)
        action.accept(array[i]);
}

forEach实现是串行的,因此它比Stream实现简单得多,后者也可以并行实现。

我忽略了T[] array = new T[200];没有通过编译的事实,因为这是一个不同的问题。

答案 1 :(得分:2)

我建议您创建一个返回流的方法:

Stream<T> stream() {
    return Arrays.stream(array);
    // or probably Arrays.stream(array, 0, size); if it's used partially
}

这样,用户不仅会forEach,还会拥有流支持的每项操作。