我正在和一个人上个人课,有名字,年龄段等细节。
年龄段区间为{“0-5”、“6-10”、“11-30”、“31-45”、“46-50”、“50-100”、“100-110”};
我要和一个人一起上课 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
}
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.
}
}
下面是我用代码对间隔进行排序的步骤。我需要根据时间间隔的增加对人进行分类。我在用树形图对间隔进行排序。
Map<String, Person> ageBandMap = new TreeMap<String, Person>(){
for(Person p: person) {
ageBandMap.put(p.ageBand, p.name);
}
}
当我打印间隔键集时,我得到
输出:
[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]
5条答案
按热度按时间mjqavswn1#
以下是所需的代码段:
41zrol4v2#
如果按希望打印的方式放置键值,则可以使用
LinkedHashMap
-它记得把秩序。4zcjmb1e3#
您需要将间隔抽象到接口:
然后在person类中使用:
然后在Map中使用:
我甚至建议把你的时间间隔常数移到
Enum
. 在你的房间里做的Interval
抽象。u4vypkhs4#
试着把你的头发分开
ageBand
字符串并将其转换为Integer
,将更易于排序。如果你不想用
Java 8
,你可以用Collections.sort()
方法。scyqe7ek5#
我们可以尝试在这里非常聪明,并将自定义比较器传递给
TreeMap
实际上是比较范围。但请注意,由于你们的范围是完全不重叠的,我们可以代表Person
利用其各自范围的下限(甚至上限)值,得到相同的排序效果。因此,我建议如下: