Самый краткий способ сравнения версий в Java - PullRequest
0 голосов
/ 29 марта 2020

Допустим, у меня есть версия вида major.minor.patch, например, 1.2.3, и я хочу сравнить ее с другой версией 1.1.5, так как 2 > 1 первая версия больше, чем вторая. Как написать самую краткую и эффективную функцию сравнения для class Version:

class Version implements Comparable<Version> {

    int major
    int minor
    int patch

    @Override
    int compareTo(Version otherVersion) {
        // ... TODO
    }
}

Ответы могут быть в Java или Groovy.

Ответы [ 2 ]

3 голосов
/ 29 марта 2020

Я бы предложил добавить геттеры для ваших трех полей, а затем Comparator, используя цепочку , сравнивающую функции. Мол,

public int getMajor() {
    return major;
}

public int getMinor() {
    return minor;
}

public int getPatch() {
    return patch;
}

private static final Comparator<Version> COMP = Comparator
        .comparingInt(Version::getMajor)
        .thenComparingInt(Version::getMinor)
        .thenComparingInt(Version::getPatch);

@Override
public int compareTo(Version otherVersion) {
    return COMP.compare(this, otherVersion);
}
1 голос
/ 29 марта 2020

groovy вариант

@groovy.transform.ToString
class Version implements Comparable<Version> {

    int major
    int minor
    int patch

    @Override
    int compareTo(Version other) {
        major<=>other.major ?: minor<=>other.minor ?: patch<=>other.patch
    }
}

def v0=new Version(major:1,minor:2,patch:11)
def v1=new Version(major:1,minor:2,patch:22)
def v2=new Version(major:1,minor:2,patch:33)

assert v1.compareTo(v0)==1
assert v1.compareTo(v2)==-1
assert v1.compareTo(v1)==0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...