다음 요구 사항을 사용하여 목록을 동적으로 정렬하는 깨끗한 방법을 찾고 있습니다.스칼라 동적 목록 정렬
case class Person(name: String, middleName:Option[String], age:Integer)
는 이제 꽤 똑바로 앞으로 그러나 이런 종류의 사용자가 열 정렬 단순히 열 이름이됩니다 다시 서버에 전달 된 매개 변수를 할 것 UI를 구동하는 경우입니다 정렬. 이 정렬 기능을 동적으로 생성하기위한 제안 사항은 무엇입니까? 사전에
감사
** 업데이트 :
val sortByName = (p :Person) => p.name
val sortByMiddleName = (p: Person) => p.middleName
val mySortMap = Map("name" -> sortByName, "middleName" -> sortByMiddleName)
val sorted = persons.sortBy(mySortMap("name"))
** 업데이트 # 2
import scala.math.Ordering.Implicits._
type PersonSorter = (Person, Person) => Boolean
val sortByName: PersonSorter = (x:Person, y:Person) => x.name < y.name
// Implicits import takes care of the Option here...
val sortByMiddleName: PersonSorter = (x:Person, y:Person) => x.middleName < y.middleName
val sortingMap: PersonSorter = Map[String, PersonSorter]("name" -> sortByName, "middleName" -> sortByMiddleName)
(제외 나이,하지만 똑같은 일이) 이제
내 목록이 있으면 쉽게 할 수 있습니다.
persons.sortWith(sortingMap("name"))
여기서 "name"은 UI에서 전달 된 매개 변수 문자열입니다. 이 같은
정확히 의미하지는 않지만이 부분을 잘 관리했습니다. 이것은 당신이 정렬하고자하는 것을 알고 있다는 가정하에 있습니다. 쿼리 매개 변수가 요청을 통해 sortBy = age로 오면 나이에 발생하도록 정렬이 필요하며 다음 요청은 sortBy = name이 될 수 있습니다. –
@Colin 업데이트 된 답변을 참조하십시오. 'sortBy'는 정렬을 수행하는 함수를 취하여 입력으로 주어진 매개 변수를 기반으로 함수를 정의하고 전달할 수 있습니다. – Brian
@ 브레인, 업데이트 된 답변을 주셔서 감사합니다. 업데이트 된 질문에서 내가하고있는 일을 할 수 있기를 바랬습니다. 나는 그것을 약간 다르게해야 할 것이다. 고마워, 나는 그 대답을 받아 들일 것이다. –