【问题标题】:How can I split an Observable that emits two types of Lists?如何拆分发出两种类型列表的 Observable?
【发布时间】:2017-05-06 03:55:23
【问题描述】:

我有一个发出 List<A>List<B> 的 Observable。我需要通过他们自己的逻辑集来处理每个列表。根据this answer,我正在研究groupBy,但它只适用于完全不同类型的发射项目。由于这两个对象都是不同类型的列表,因此该解决方案并没有太大帮助。我也找不到任何东西来确定列表的类型(不使用反射)。

有什么想法吗?

【问题讨论】:

  • Observable 的返回类型是什么? A 和 B 是否继承自同一个类?也许还有另一种解决方案。请提供一些代码。
  • A 和 B 不是从同一个类继承的。 Observable 是使用Observable.just(List<A>, List<B>) 创建的
  • 你能改变 observable 的创建方式吗?似乎您最好的选择是将这些列表包装在对象中,以在运行时保留有关其类型的更多信息。
  • @noppa 是的,这就是我最终要做的。我将 observable 分成两部分,每一个都发出自己的列表,通过逻辑推动它,然后通过 zip 将两者结合起来(因为我仍然需要两个列表同时进行另一个调用)。然而,根据最初的问题,我可以得出结论,在一个 observable 中发出 2 个列表并希望对它们中的每一个做一些事情是让人头疼的。谢谢。

标签: java rx-java


【解决方案1】:

处理此问题的一种方法是查看List 的第一个元素(如果它非空)。这样,您就可以确定List 的类型:

if (list1.get(0) instanceof A) {
    // list1 is of type A
    // list2 is of type B
} else {
    // list1 is of type B
    // list2 is of type A
}

【讨论】:

  • 是的,我以前想过。不是最干净的,并且覆盖诸如空列表之类的情况会使其更不干净。但是,这是迄今为止唯一可行的解​​决方案。谢谢
  • 不客气,是的,类型擦除使得在运行时使用泛型非常困难。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-23
  • 1970-01-01
相关资源
最近更新 更多