rxAndroid groupBy 관련 질문
조회수 2112회
안녕하세요 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)); });
흠.. 소스가 보기좋게 정리아안되네요 ㅠㅠ 그룹하는부분은 저런식으로되었는데 그룹된놈들을 해쉬멥에 넣을때 뭔가 지져분하네요
답변감사드립니다 ㅎㅎ
-
(•́ ✖ •̀)
알 수 없는 사용자
-
댓글 입력