java - 如何在 RxJava2 中的 groupBy 之后获取类中的原始元素?
问题描述
我有一个 JSON 元素列表。例如,每个 JSON 元素都表示为名为“Foo”的 Java 类。这个 Foo 类有其他字段,它们也是一个 Java 类。我正在尝试按 Bar id 对这些 Foo 元素进行分组,然后我想对分组的元素进行其他操作,例如过滤器、排序。
public class Foo {
private int id;
private Bar bar;
private Baz baz;
private int qty;
}
public class Bar {
private int id;
private String name;
}
public class Baz {
private int id;
private String type;
}
我尝试了类似的方法来查看 groupBy 操作后的结果,但它没有打印任何内容。但是,如果我提供简单的元素,如 String 或 Integer 而不是 Foo 并尝试使用相同的方法对它们进行分组,它就可以工作。
List<Foo> myInput = new ArrayList<>();
myInput.add(...);
myInput.add(...);
Observable.fromIterable(myInput)
.groupBy(el -> el.getBar().getId())
.concatMapSingle(Observable::toList)
.subscribe(System.out::println);
此代码使用此输入并随后打印出分组元素:
Observable<String> animals = Observable.just(
"Tiger", "Elephant", "Cat", "Chameleon", "Frog", "Fish", "Flamingo");
animals.groupBy(animal -> animal.charAt(0))
.concatMapSingle(Observable::toList)
.subscribe(System.out::println);
我想做的是这样的:
Observable.fromIterable(myInput)
.filter(el -> el.getBaz().getType().equals("type1"))
.groupBy(el -> el.getBar().getId())
//.filter(...)
//.sorted(...)
如何对元素进行分组并检索该分组元素并对其应用其他操作?您能否也稍微解释一下,以便我了解幕后发生的事情?
解决方案
来自以下文档Observable#groupBy
:
根据指定的标准对 ObservableSource 发出的项目进行分组,并将这些分组的项目作为 GroupedObservables 发出。
来自以下文档GroupedObservable
:
一个按key分组的Observable,可以通过getKey()获取其值。
因此,GroupedObservable
是的子类,Observable
因此您可以应用常用map
的 , filter
,flatMap
等可用的运算符。
例如,如果您想对每个 eachqty
的分组s 的 s 求和,您可以通过以下方式映射s :Foo
Bar
GroupedObservable
Observable.fromIterable(foos)
.groupBy(foo -> foo.getBar().getId())
.flatMapSingle(grouped -> grouped.map(foo -> foo.qty).reduce(0, Integer::sum))
.subscribe(System.out::println);
推荐阅读
- python - NBConvert 将单元格与第二个数据源匹配
- c++ - 编译 C++Builder 6 项目时出现“未解决的外部”错误
- javascript - Paperjs android捏入和捏出添加线条/笔触
- c++ - 在 cmake mono 存储库中包含 cppitertools 的正确方法
- javascript - 如何更改定义 P2P 连接如何在 WebRTC 中变得不可写的参数?
- sql - 如何在配置单元中生成 MTD(月至今)滚动总和?
- regex - 重定向过多 - 使用 htaccess 将 IE 重定向到特定页面
- javascript - 在 ReactJS Hook 中的表单内单击时添加更多输入
- intellij-idea - 如何通过intellij idea更改新分支名称的大写字母
- search - Grep 部分搜索但打印整个匹配的单词