일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 | 31 |
- 안드로이드 백그라운드
- retrofit 사용법
- data class
- rxandroi
- rxjava
- 한글꺠짐
- http
- 안드로이드 스튜디오
- IT
- 안드로이드
- 자바
- java
- 프로그래밍
- 안드로이드 fragment
- Retrofit
- 수동서명
- Android Studio
- takelast
- 곰믹스 #곰믹스 프로 #곰믹스프로 #자막 #프리미어 #2019
- tablayout
- GZIPInputStream
- Collection Sort
- Do it! 안드로이드 앱 프로그래밍 - 누가 버전&안드로이드 스튜디오 반영판
- android api
- 안드로이드 번역
- android bacgkround
- HttpsURLConnection
- Android
- android Deprecated
- 안드로이드 블로그
- Today
- Total
생각자유의 안드로이드 이야기
Rxjava를 이용하여 배열에서 필요한 값만 가져오기[filter, taleLast) 본문
안녕하세요. 자유입니다.
이번엔 실제 개발진행할때 필요로 했던 간단한 로직이 필요한데 RxJava를 이용하여 해결한 내용을 간략하게 알려드리고 합니다.
{"original", "360" ,"480","720"}
이런 문자열 배열이 있다고 가정을 했을때.
1. 배열은 720을 제외해야 한다.
2 배열은 480을 사용해야 하며 없으면 320 없으면 original을 사용해야 한다.
3.original을 항상 존재한다.
이런 조건을 가졌다고 가정 했을 때.
일반적으로는 for -> if조합을 이용해서 저 안에 값을 가져 왔을것이다.
근데 Rxjava를 사용하면 조금은 깔끔(?)하게 저 로직을 정리 할 수 있을거 같다
일단 필요한것을 .filter와 .takeLast이다.
일단 배열이 무엇이 되었던 720을 제외하자.
그 다음에 720을 제외한 후 제일 마지막 값을 가져오게 하자. 이렇게 하면 맨 마지막이 무엇이 되었든 480,320 맨 마지막 값을 가져올 수 있다. takeLast는 인자로 몇 개의 마지막 값을 가져오는지 설정인데 난 무조건 1개라 1을 주었습니다.
간단하게 소스코드로 보면
Observable.from(videosUrl)
.filter(v -> !v.resolution.equals("720"))
.takeLast(1)
.subscribe(v -> {
System.out.println("해상도 순서 = " + v.resolution);
});
I/System.out: 해상도 순서 = 480
내가 원하는 값을 가져 오게 되었습니다.