-
[코틀린] 여러 조건을 기준으로 정렬카테고리 없음 2024. 5. 31. 00:31
기존엔 아래 방법을 사용하여 정렬하려고 했으나
다시 생각해보니 정렬 메서드가 따로 있으면 결국엔 마지막을 기준으로 정렬되기 때문에
구글링을 통하여 다른 방법을 찾아보았습니다.
@ViewModelScoped class ListUseCase @Inject constructor( private val postRepository: PostRepository ) { suspend operator fun invoke(mode: Mode, tags: List<String>): List<PostModel> { return postRepository.getPosts(tags).filter { it.getMode() == mode }.sortedByDescending { it.time }.sortedBy { it.getJoinedPeopleCount() == it.getTotalPeopleCount() } } }
이를 해결하기 위해 sortedWith, compareBy, thenByDescending 이 3개를 활용하여 해결하였습니다.
첫번째로 sortedWith 안에 compareBy을 넣어 정렬될 값을 넣습니다.
참가 중인 인원 == 총 필요한 인원이 같다면 해당 방은 꽉 찼다고 판단하여
해당 방이 뒤로가게 하기 위해 해당 구문을 사용하였습니다.
두번째로 thenByDescending로 기존 정렬된 값에서 추가로 정렬할 값을 넣습니다.
시간을 빠른 순으로 정렬하여 생성된지 얼마 되지 않은 방은 가장 앞에 오도록 하였습니다.
정리하자면 꽉찬 방은 뒤로가면서 생성된지 얼마 되지 않은 방이 앞으로 오게 될 것입니다.
@ViewModelScoped class ListUseCase @Inject constructor( private val postRepository: PostRepository ) { suspend operator fun invoke(mode: Mode, tags: List<String>): List<PostModel> { return postRepository.getPosts(tags).filter { it.getMode() == mode }.sortedWith( compareBy<PostModel> { // 참가 중인 인원 == 총 필요한 인원 it.getJoinedPeopleCount() == it.getTotalPeopleCount() }.thenByDescending { it.time } ) } }
정상적으로 작동하는 것을 볼 수 있습니다.