【问题标题】:RxJava: How to combine List of objects to List of another objects group byRxJava:如何将对象列表组合到另一个对象组的列表中
【发布时间】:2021-10-19 13:42:20
【问题描述】:

我有 SourceObjects 列表,我需要使用按名称分组将其转换为 ResultObjects 列表

class SourceObject {
  private String name;
  private String grade;
}

class ResultObject {
  private String name;
  private List<String> grades;
}

基本上,我需要按名称分组并将所有年级的学生添加到ResultObject,所以如果SourceObject有x个,那么ResultObject的数量应该是SourceObject,它们将转换为一个ResultObject

输入:Single&lt;SourceObject&gt;

输出:Single&lt;ResultObject&gt;

【问题讨论】:

    标签: rx-java rx-java2


    【解决方案1】:

    将内部列表变成一个序列,通过 HashMap 收集结果,然后将值映射回列表:

    Single<List<SourceObject>> source = ...
    
    Single<List<ResultObject>> result = source
       .flattenAsObservable(v -> v)
       .collect(
           () -> new HashMap<String, ResultObject>(),
           (map, item) -> map.computeIfAbsent(item.name, 
                 k -> new ResultObject(k)).grades.add(item.grade))
       )
       .<List<ResultObject>>map(map -> new ArrayList<ResultObject>(map.values()))
       ;
           
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-05
      • 2022-10-17
      • 1970-01-01
      • 2013-11-10
      • 1970-01-01
      • 1970-01-01
      • 2013-02-02
      相关资源
      最近更新 更多