Kotlin Simple Version Compare

2023. 3. 21. 15:36·SpringBoot

Kotlin value class 및 operator override 를  이용한 버전 비교

 

전제조건

버전값은 콤마(.) 로 구분하며 숫자만 이용할 수 있다.

operator 의 경우 >, <, >=, <= 를 이용할 수 있다.

 

소스코드

@JvmInline
value class VersionNumber(private val ver: String) {
    operator fun compareTo(right: VersionNumber): Int {
        if (ver == right.ver) return 0

        var comparisonResult = 0

        val splitRegex = "\\.".toRegex()

        val lefts: List<String> = this.ver.split(splitRegex)
        val rights: List<String> = right.ver.split(splitRegex)
        val maxLengthOfVersionSplits = lefts.size.coerceAtLeast(rights.size)

        for (i in 0 until maxLengthOfVersionSplits) {
            val leftVersion = parseNumber(i, lefts)
            val rightVersion = parseNumber(i, rights)
            val compare = leftVersion.compareTo(rightVersion)
            if (compare != 0) {
                comparisonResult = compare
                break
            }
        }

        return comparisonResult
    }

    private fun parseNumber(i: Int, splits: List<String>): Int {
        return if (i < splits.size) {
            splits[i]
                .replace("[^0-9]".toRegex(), "")
                .toIntOrNull()
                ?: 0
        } else 0
    }

}

 

테스트 코드

class VersionNumberTest {
    @Test
    fun simpleTest() {
        assertThat(VersionNumber("1.0.0") >= VersionNumber("1.0.0")).isTrue
        assertThat(VersionNumber("1.0.0") <= VersionNumber("1.0.0")).isTrue
        assertThat(VersionNumber("1.0.0") < VersionNumber("1.0.1")).isTrue
        assertThat(VersionNumber("1.0.1") > VersionNumber("1.0.0")).isTrue
    }
}

'SpringBoot' 카테고리의 다른 글

profiles 를 이용한 aws iam 과 secret key 기반 인증 설정  (0) 2023.06.26
Spring 6 의 HTTP Interface  (0) 2023.03.14
Retrying Feign Calls  (0) 2023.03.14
RedisTemplate 과 Json Serializer 설정  (0) 2019.07.09
MongoDB _class 필드 제거하기  (0) 2019.07.09
'SpringBoot' 카테고리의 다른 글
  • profiles 를 이용한 aws iam 과 secret key 기반 인증 설정
  • Spring 6 의 HTTP Interface
  • Retrying Feign Calls
  • RedisTemplate 과 Json Serializer 설정
somoly
somoly
About me.
  • somoly
    somoly.tistory.com
    somoly
  • 전체
    오늘
    어제
    • 전체 (55)
      • SpringBoot (8)
      • Kotlin (5)
      • Javascript (4)
      • 백엔드 (6)
      • Linux (25)
      • Windows (1)
      • IT (2)
      • FF14 (1)
      • 애니 (1)
      • Figure (1)
      • 회사생활 (1)
  • 블로그 메뉴

    • HOME
    • TAGS
    • MEDIA
    • LOCATION
    • GUESTBOOK
    • ADMIN
    • WRITE
  • 링크

    • [FF14] 5.0 (71-80) 제작 레벨링 매크로
    • [FF14] 갈론드벨
    • [FF14] FFLogs
    • [FF14] Ariyala 장비 시뮬레이터
    • [FF14] 낚시 도우미
    • [FF14] 인테리어 정보
    • [FF14] 의상 코디 정보
  • 공지사항

  • 인기 글

  • 태그

    ubuntu
    jvminline
    종료
    utf-8
    30일전
    linux
    동영상
    83인치
    bcmod
    accesskey
    springboot
    Spring
    피규어
    dynamodb local
    versioncomapre
    exchage method
    리눅스
    최후의 재림
    설치
    javascript
    tabulator
    P2P
    interactive table
    Kotlin
    부팅
    string methods
    77인치
    우분투
    VirtualBox
    HTTP
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
somoly
Kotlin Simple Version Compare
상단으로

티스토리툴바