我为我的游戏编写了自己的容器类,类似于ArrayList的容器类,但在很多方面有所不同,无论如何我想写一个将遍历支持数组的foreach方法。
我知道我可以使用Arrays.stream
但是我很好奇如何编写#foreach方法的自定义lambda实现来迭代数组。
有人有线索吗?感谢
示例:
class Container<T> {
T[] array = new T[200];
}
现在让我们说我想这样做:
Container<Fish> fishies = new Container();
fishies.forEach(fish->System::out);
答案 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
,还会拥有流支持的每项操作。