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);
}
}
}
참고
728x90