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를 하고싶은데 감이 잡히지 않아 질문드립니다. 고수님들의 조언 부탁드립니다


조회수 197


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