rxAndroid groupBy 관련 질문

조회수 2099회

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

  • (•́ ✖ •̀)
    알 수 없는 사용자

3 답변

  • 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;
            }
        }
    );
    
  • 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"))이렇게 사용하면 될 것 같네요.

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

    
    
    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));
     });
    
    

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

    답변감사드립니다 ㅎㅎ

    • (•́ ✖ •̀)
      알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)