![](/img/trans.png)
[英]Which Java data structure should I use to input double values at given index without giving fixed size?
[英]What two dimensional data structure should I use which supports fixed size in Java?
我正在写一个有棋盘的游戏:
________
|__|__|__|
|__|__|__|
|__|__|__|
我想从顶部分别推入各列中的项目:
________
|__|__|X_| // <-- pushToTop(2, item);
|__|__|__|
|__|__|__|
和/或从底部开始:
________
|__|__|X_|
|__|__|__|
|__|__|X_| // <-- pushToBottom(2, item);
我已经有一个使用2维数组的实现,它可以完美运行。 我的问题是我有一组带有如下代码的函数:
List<Card> result = new ArrayList<>();
for (Card[] column : board) {
for (Card card : column) {
// do something
}
}
return result;
我想使用Java 8 Stream API中的 map
/ filter
/ reduce
而不是嵌套的for循环来处理我的开发board
。
我的问题是,我可以使用什么样的Collection
像数组一样工作(固定大小,我可以基于索引添加项目,我可以在不更改数组大小的情况下删除项目)?
澄清:主要问题是原始数组不能被视为Collection
因此不参与Stream抽象。
它不是特定于Java 8的,但是听起来您将从Guava的Table
受益; 值得注意的是ArrayTable
。
它为您提供了一个更方便的API,用于在特定坐标处添加和检索事物,并且由于您知道在获取对象时世界的大小,因此您不必担心太多空间或创建一堆笨拙的东西。对象以捆绑一切。
有很多事情要考虑:
流API合规性
Stream
接口,则必须直接实现它,或提供返回Stream
实例(更好的方法)的转换方法。 内部实施
Collection
实例,并让Collection
负责转换为Stream
。 迭代顺序
如果对迭代顺序的假设是正确的,那么最简单的方法是在内部使用ArrayList<T>
并始终将矩阵中的坐标重新计算为ArrayList
索引。 流的迭代顺序将与数据结构中Iterator
的顺序相同。
interface MyType<T> {
void pushtoTop(int, T);
void pushToBottom(int, T);
Stream stream();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.