Hello

점으로 구분된 버전 문자열 비교 본문

java

점으로 구분된 버전 문자열 비교

nari0_0 2023. 12. 6. 14:29
728x90

자바에서 점으로된 문자열 비교해 소팅이 필요한 경우가 생겨 maven-artifact 라이브러리를 사용한 내용을 정리하려고 합니다.

 

maven denpendency

<dependency>
    <groupId>org.apache.maven</groupId>
    <artifactId>maven-artifact</artifactId>
    <version>3.9.6</version>
</dependency>

 

version compare test code

public class VersionCompareTest {
    @Test
    void version_compare_test() {
        List<Test1> list = new ArrayList<>();
        for (int i = 0; i < 100; i++) {
            Test1 test1 = new Test1();
            test1.setSeq(i + 1000);
            test1.setName("slot" + i);
            test1.setVersion((i / 50) + "." + (i / 20) + "." + i / 10);
            list.add(test1);
        }

        Collections.shuffle(list);

        // 1. version으로 내림차순 정렬
        // 2. seq로 내림차순 정렬
        list.sort(Comparator
                .comparing(Test1::getComparableVersion).reversed()
                .thenComparing((o1, o2) -> o1.seq > o2.seq ? -1 : 1));
        Assertions.assertEquals(1099, list.get(0).getSeq());

        // 3. version이 0.1.0 이상인 것만 추출 (80개)
        List<Test1> filterList = list.stream()
                .filter(x -> x.getComparableVersion().compareTo(new ComparableVersion("0.1.0")) >= 0)
                .collect(Collectors.toList());
        Assertions.assertEquals(80, filterList.size());
    }
    @Data
    public static class Test1 {
        private Integer seq;
        private String name;
        private String version;

        public ComparableVersion getComparableVersion() {
            return new ComparableVersion(version);
        }

    }
}

참고

https://www.baeldung.com/java-comparing-versions

728x90