【问题标题】:Double reference in different objects dataset不同对象数据集中的双重引用
【发布时间】:2018-08-11 07:56:11
【问题描述】:

我有两组对象,A 和 B。A 类型的对象在列表中包含不同数量的 B 类型的对象。例子: A1 - B1,B2 A2 - B3,B4,B5,B6 A3 - B7、B8、B9。 我希望将所有 B 型项目合并到一个列表中,并通过索引访问它们(最具体地是将它们用作 RecyclerViewAdapter 的数据),但以某种方式保持对容器 A 对象的引用(对象上的 None 可以被修改,因此我必须使用数据结构)。

我尝试使用 HashMap>,但这样我无法访问 B 项的所有索引,并且 HashMap 将意味着重复 A 类型对象,从而导致不必要的内存影响。有更好的方法吗?谢谢。

【问题讨论】:

  • 创建一个ABPair 项目列表,其中每个ABPair 引用一个B 对象及其对应的A 对象。如果List<ABPair> abList 是您的列表,那么abList.get(i).getB() 会为您获取索引i 处的B 项目,abList.get(i).getA()` 会获取相应的A 对象。
  • @Kevin Anderson 谢谢!!

标签: java list dictionary data-structures dataset


【解决方案1】:

你可以这样做:

objectASet.stream().map(a -> {
    a.getB().stream.map(b -> new Pair<>(b, a)).collect(Collectors.toList());
    ).flatMap(list -> list.stream()).collect(Collectors.toList());

这段代码的作用如下:

  1. 遍历包含每个 A 对象中的 B 对象的 ObjectASet。
  2. 将每个 a 映射到一个 javaFx 对对象列表,其中键是 b,值是 a 的引用。如果 b 对象不是唯一的对象,那么您可以根据需要将 b 与 a 交换。
  3. 平面图意味着将所有单独创建的列表合并到一个大列表流中。
  4. 将此流收集到一个列表中。

现在您有一个列表,其中包含键为 b 且值为 a 引用的对。您可以通过索引引用列表。希望此解决方案对您有所帮助

【讨论】:

    猜你喜欢
    • 2012-08-13
    • 1970-01-01
    • 2012-04-10
    • 2019-01-03
    • 2018-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多