工作中遇到按照类的某个属性排列,这个属性是个枚举类型,按照要求的优先级排列。

可以使用ComparatorChain、BeanComparator、FixedOrderComparator实现。

举一个例子:

学生类:包含姓名、年龄、性别、性格。性格是个枚举类型。

性格类:枚举类型,分为四类:内向,外向,太监,不知道四种类型。

SortUtil类:排序类。

Student.java

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
;  
;  
  
{  
      
;  
;  
;  
;  
      
{  
;  
;  
;  
;  
}  
{  
;  
}  
{  
;  
}  
      
{  
;  
}  
{  
;  
}  
      
{  
;  
}  
{  
;  
}  
      
{  
;  
}  
{  
;  
}     
      
@Override  
{  
;  
;  
}  
      
{  
;  
;  
;  
;  
          
;  
;  
;  
;  
;  
          
;  
{  
;  
}  
          
;  
          
;  
{  
;  
}  
          
              
}  
  
}  

Character类:

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
{  
  
,  
,  
,  
;  
      
;  
  
{  
;  
  
}  
      
{  
;  
}     
      
{  
;  
}  
  
}

SortUtil类:

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
;  
;  
;  
;  
;  
;  
;  
;  
  
{  
      
;  
      
)  
{  
{  
;  
;  
              
;  
              
;  
;  
;  
;  
              
;  
{  
;  
}         
}  
  
}

moInfoComparator.addComparator(new BeanComparator(“character”,TypeComparator));  

这个类中首先按照性格属性来排序,利用FixedOrderComparator设置优先级,性格属性Character.UNKOWN排第一,

然后IN,其次OUT,最后BOTH。如果性格属性相同,按照age排序,true表示逆序(默认排序是从小到大),然后按

照name,最后按照sex属性排序。

需要导入commons-beanutils,commons-logging,commons-collections包。

结果:ComparatorChain、BeanComparator用法示例(枚举类型排序转)

可以看到排序之后首先按照性格排序,性格是枚举类型,排序规则用FixedOrderComparator定义,性格相同按照年龄,所以:

 
 
 
 
 
Java
 
1
2
3
;  
;  
;

这四句话的顺序决定了先已哪个属性排序。

相关文章:

  • 2021-12-06
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2021-10-14
  • 2022-02-09
  • 2022-12-23
  • 2022-12-23
  • 2022-01-08
相关资源
相似解决方案