在java中对数字字符串间隔进行排序

Jab*_*ngg 5 java sorting treemap

我有一个Person类和一些Person,并且有详细信息,因为有名字,年龄段.
年龄段间隔为{"0-5","6-10","11-30","31-45","46-50","50-100","100-110"};

我有一个Person类name,ageBand字符串间隔和它的参数化构造函数,getter,setter.

class Person {
    String name;
    String ageBand; //say it is string "0-50" which i pass in constructor while creating a person.
    //getters
    //setters
}
Run Code Online (Sandbox Code Playgroud)

class TestAgeBand {
    public static void main(String args[]) {
        ArrayList<Person> person = new ArrayList<Person>();

        Person p1 = new Person("Mike1", "0-5");   
        Person p2 = new Person("Mike2", "6-10");
        Person p3 = new Person("Mike3", "11-30");   
        Person p4 = new Person("Mike4", "31-45");   
        Person p5 = new Person("Mike5", "50-100");   
        Person p6 = new Person("Mike6", "46-50"); 
        Person p7 = new Person("Mike7", "100-110");

        person.add(p1);
        //adding all persons to list.
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我正在使用我的代码对间隔进行排序.我需要按照不断增加的间隔对人进行分类.我正在使用Treemap对间隔进行排序.

Map<String, Person> ageBandMap = new TreeMap<String, Person>(){
    for(Person p: person) {
        ageBandMap.put(p.ageBand, p.name);
    }
}
Run Code Online (Sandbox Code Playgroud)

当我打印间隔键集时,我明白了

输出:

[0-5,100-110,11-30,31-45,46-50,50-100,6-10]

我不需要.我需要这样的间隔排序如下:

[0-5,6-10,11-30,31-45,46-50,50-100,100-110]

Sch*_*uca 4

尝试拆分字符串ageBand并将其转换为Integer,这样会更容易排序。

person.stream().sorted(Comparator.comparing(element -> Integer.parseInt(element.getAgeBand().split("-")[0])))
            .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

如果你不想使用Java 8,你可以用方法来完成Collections.sort()

 Collections.sort(person, new Comparator<Person>() {
        @Override
        public int compare(Person o1, Person o2) {
            return Integer.parseInt(o1.getAgeBand().split("-")[0]) - Integer.parseInt(o2.getAgeBand().split("-")[0]);
        }
    });
Run Code Online (Sandbox Code Playgroud)