rxAndroid groupBy 관련 질문


안녕하세요 rxAndroid 관련해서 질문드릴려고하는데요. 흠....... 구글링을 많이 해보았는데 원하는 답변을 얻지 못해서 문의드립니다. ㅠㅠ

다름이아니라 제가 원하는 결과는

class TempData{
    private String subjectNm;// A,B,C,D 로 구분 
    private String subjectCode;
    private int subjectDate;
}


ArrayList<TempData> data=new ArrayList<>();
data.add(new TempData("A","100",20161425);
data.add(new TempData("A","100",20161425);
data.add(new TempData("B","100",20161425);
data.add(new TempData("B","100",20161425);
data.add(new TempData("B","100",20161425);
data.add(new TempData("A","100",20161425);
data.add(new TempData("C","100",20161425);
data.add(new TempData("C","100",20161425);

데이터가 이렇게 된다고 가정하였을때
Observable.from(data).groupBy()........................... 이런식으로해서 subjectNm 가 "A"인 ArrayList,"B"인 ArrayList,"C"인 ArrayList 이렇게 groupBy를 하고싶은데 감이 잡히지 않아 질문드립니다. 고수님들의 조언 부탁드립니다


조회수 423


Kakao codefestival banner

3 답변


좋아요
2
싫어요
채택취소하기

JAVA 8의 람다식이 사용 가능하다면 다음과 같이 하면 될것 같은 데...

Observable.from(data).groupBy(item=>item.subjectNm);

람다식을 안쓰려면 다음과 같이 표현을 바꾸면 될것 같습니다.

Observable.from(data).groupBy(
    new Func1<TeamData, String>() {
        @Override
        public String call(TeamData item) {
            return item.subjectNm;
        }
    }
);
  • 2016년 04월 25일에 작성됨
    리눅스(유닉스) 기반의 시스템에서 웹 서비스를 개발하고 있습니다.


rxAndroid는 잘 모르지만 그냥 필터링을 해 주는 메소드를 만들어서 사용하시면 어떨까요? 우선 TempData의 필드를 public으로 변경하고 이런 메소드를 만들어서요.

ArrayList<TempData> filter(ArrayList<TempData>data, String name){
    ArrayList<TempData> filteredData=new ArrayList<>();
    for(TempData tempData:data){
      if(tempData.subjectNm.equals(name)){
        filteredData.add(tempData);
      }
    }
    return filteredData;
}

Observable.from(filter(data,"A"))이렇게 사용하면 될 것 같네요.

  • 2016년 04월 25일에 작성됨
    루비와 파이썬을 좋아합니다. 새로운 언어를 배우는것도 좋아해요. 요즘은 개발은 주로 레일즈 사이트 수정하는 일을 하고, 예전에는 모바일 게임도 조금 만들어 봤습니다.


늦게 확인하였네요 ㅠㅠ 흠.. 나름 해결해본다고하였는데



Map<Integer, List<TempDetailData>> groupedValues = new HashMap<>();
Observable.from(allData)
    .groupBy(TempDetailData::getSubjectIndex).subscribe(go->
{
   List<TempDetailData> groupValues = new ArrayList<>();
       groupedValues.put(go.getKey(), groupValues);
       go.subscribe(tempDetailData ->groupedValues.get(go.getKey()).add(tempDetailData));
 });

흠.. 소스가 보기좋게 정리아안되네요 ㅠㅠ 그룹하는부분은 저런식으로되었는데 그룹된놈들을 해쉬멥에 넣을때 뭔가 지져분하네요

답변감사드립니다 ㅎㅎ


로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close