如何在RX Java中分组并返回列表

Sha*_*man 2 android rx-java rx-android

我正在尝试根据Rxjava中的某些条件创建组列表。

以下是我的回复:

{  
   "dates":[  
      {  
         "date":18,
         "value":"1"
      },
      {  
         "date":18,
         "value":"2"
      },
      {  
         "date":18,
         "value":"3"
      },
      {  
         "date":19,
         "value":"1"
      },
      {  
         "date":19,
         "value":"2"
      },
      {  
         "date":19,
         "value":"3"
      },
      {  
         "date":19,
         "value":"4"
      }
   ]
}
Run Code Online (Sandbox Code Playgroud)

如何使用Rxjava按值18 [值1,值2,值3,最高值= 3,最低值= 1]分组19 [值1,值2,值3,值4,最高值= 4,最低值= 1]

注意:我可以创建for循环,但是将从服务器获取响应,并且由于返回了使用rx java功能的可观察到的想法。

任何帮助将不胜感激。

谢谢Shanthi

Jon*_*Jon 5

考虑按组功能。

这是任何有好奇心的人的示例:

class DateModel implements Comparable<DateModel>{
    Integer date;
    Integer value;

    public DateModel(int date, int value){
        this.date = date; 
        this.value = value;
    }

    @Override
    public int compareTo(DateModel o) {
        return value.compareTo(o.value);
    }
}
Run Code Online (Sandbox Code Playgroud)

然后,如果我们必须汇总这些模型对象的列表:

// example list
List<DateModel> dateList = Arrays.asList(
  new DateModel(18,1),
  new DateModel(18,2),
  new DateModel(18,3),
  new DateModel(19,1),
  new DateModel(19,2),
  new DateModel(19,3),
  new DateModel(19,4)
);

// the following observable will give you an emission for every grouping
// for the example data above, you should get two emissions (group 18 and 19)
Observable<PriorityQueue<DateModel>> observable = 
  Observable.from(dateList)
    .groupBy(dateModel -> dateModel.date)
    .flatMap(groups -> groups.collect(PriorityQueue::new, PriorityQueue::add));
Run Code Online (Sandbox Code Playgroud)

PriorityQueue只是用于收集的结构的一个示例。如果从队列中弹出,则会得到18-1、18-2、18-3等(按您要求的顺序)。您可以使用其他结构来仅查找最大值和最小值。