最佳存储方法(int xIndex、int yIndex、View view、String cellName)

Posted

技术标签:

【中文标题】最佳存储方法(int xIndex、int yIndex、View view、String cellName)【英文标题】:best approach to store (int xIndex, int yIndex, View view, String cellName) 【发布时间】:2022-01-09 00:38:22 【问题描述】:

我正在开发小型 android 库,出于特定原因,我需要存储这样的结构 (

int xIndex - 表格结构中视图的 x 索引 int yIndex - 类表结构中视图的 y 索引 视图视图 - 视图本身 String cellName - 这是一个单元格的名称,坐标为 x, y,采用类似表格的结构

所以我以后可以通过 (xIndex,yIndex) 或它的 cellName 以下列方式处理存储的视图:

View view = manager.getCell(xIndex, yIndex);
//or 
View view = manager.getByName(cellName);

我实际上希望这个实现尽可能简单,所以任何关于我可以使用什么样的 Map 或类似的东西来通过一对整数或字符串来寻址对象的想法?我不想创建像下面这样的中间类

CellDefinition(int x, int y, String cellName)

所以以后它可以像这样 Map 而我需要类似的东西 Object<Integer[2], String, View>

所以我以后可以通过 new[]x,y 或字符串 "cellName" 并通过这些索引检索 View 对象。

欢迎提出任何意见

【问题讨论】:

在这里使用中间类将在未来为您提供更多的灵活性。如果您将来要添加或删除字段,那么痛苦会少很多 您为什么不想创建一个代表文字软件实体的类?这就是他们的目的 【参考方案1】:

我想你可以做类似List<Map<String, Object>> 的事情,其中​​列表是 Map 的集合,它们代替了新的类对象。例如,您的键值对可能类似于 "Name" : "CellName", "x" : 1, "y" : 2, "View" : viewObj

从那里,您可以使用流和生成的地图来选择您的视图:

List<HashMap<String, Object> list = ...

//By name
HashMap<String, Object> selectedMap = list.stream()
        .filter(m -> m.get("Name").equals("SomeName"))
        .findFirst()
        .orElse(null);

//Or by point
HashMap<String, Object> selectedMap = list.stream()
        .filter(m -> m.get("x") == 1 && m.get("y") == 2)
        .findFirst()
        .orElse(null);

View view = (View) selectedMapBy.get("View");

不过,到那时,执行List&lt;CustomClass&gt; 之类的操作可能会更容易,这样您就不必处理键和“对象”类型:

List<CellDefinition> list = ...
CellDefinition cell = list.stream()
    .filter(c -> c.getName().equals("SomeName"))
    .findFirst()
    .orElse(null);

View view = cell.getView();

【讨论】:

以上是关于最佳存储方法(int xIndex、int yIndex、View view、String cellName)的主要内容,如果未能解决你的问题,请参考以下文章

多部分 int 字典键的最佳方法?

C ++:这两种将数字写入矩阵的方式之间在速度上有显着差异吗?

错误:“最佳重载方法匹配”和“参数 1:无法从 'string' 转换为 'int'”

在 Presto 中将存储为 INT 的时间转换为 VARCHAR

在 c 中找到一个 int 的位宽;最佳跨平台方法

在 Javascript 中解析 int 的最佳方法