List集合对象中按照不同属性大小排序的实例

2025-05-29 0 52

实例如下:

?

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

79

80

81

82

83

84

85

86

87

88
package com.huad.luck;

import java.util.ArrayList;

import java.util.Collections;

import java.util.Comparator;

import java.util.List;

public class Test {

public static void main(String[] args) {

Person p = new Person();

p.setName("tom");

p.setAge(11);

Person p1 = new Person();

p1.setName("lilei");

p1.setAge(19);

Person p2 = new Person();

p2.setName("json");

p2.setAge(15);

List<Person> list =new ArrayList<Person>();

list.add(p);

list.add(p1);

list.add(p2);

Collections.sort(list,new Comparator<Person>() {

//这里可以再Person中实现 Comparator<T>接口,重写compare方法

@Override

public int compare(Person o1, Person o2) {

//这里按照名字排序

return o1.getName().compareTo(o2.getName());

//这里按照age排序

//return (o1.getAge()+"").compareTo(o2.getAge()+"");

//。。。根据不同属性值排序

}

});

for (int i = 0; i < list.size(); i++) {

System.out.println(list.get(i).getName());

}

}

}

//Person类

package com.huad.luck;

public class Person{

private String name ;

private int age;

public Person(String name , int age) {

this.name = name;

this.age = age;

}

public Person( ) {

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

}

<p style="padding-top: 0px; padding-bottom: 0px; margin-top: 8px; margin-bottom: 8px; line-height: 22.5px; letter-spacing: 0.5px; font-size: 12.5px; word-wrap: break-word; word-break: break-all; color: rgb(51, 51, 51); font-family: 'Microsoft YaHei', Verdana, sans-serif, 宋体;"><span style="padding: 0px; margin: 0px; letter-spacing: normal; font-stretch: normal; font-size: 14px; line-height: 24px; font-family: Tahoma; color: rgb(0, 0, 0);">用collection.sort()方法对list集合排序</span><br style="padding: 0px; margin: 0px;" /></p><p style="padding-top: 0px; padding-bottom: 0px; margin-top: 0px; margin-bottom: 0px; line-height: 24px; font-size: 14px; word-wrap: break-word; word-break: break-all; font-stretch: normal; font-family: Tahoma;"><span style="padding: 0px; margin: 0px; list-style: none outside none; word-wrap: break-word; word-break: normal;"><span style="padding: 0px; margin: 0px; list-style: none outside none; line-height: 21px; word-wrap: break-word; word-break: normal;"></span></span></p><p style="padding-top: 0px; padding-bottom: 0px; margin-top: 1em; margin-bottom: 0.5em; line-height: 24px; font-size: 14px; word-wrap: break-word; word-break: break-all; font-stretch: normal; font-family: Tahoma;">第一种是list中的对象实现Comparable接口,如下:<span style="padding: 0px; margin: 0px; list-style: none outside none; word-wrap: break-word; word-break: normal;"> </span></p><pre class="java" style="padding: 5px; margin-top: 0px; margin-bottom: 0px; line-height: 18px; font-size: 9pt; font-family: 'Courier New', Arial; border: 1px solid rgb(221, 221, 221); color: rgb(51, 51, 51); background: rgb(246, 246, 246);">/**

* 根据order对User排序

*/

public class User implements Comparable<User>{

private String name;

private Integer order;

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public Integer getOrder() {

return order;

}

public void setOrder(Integer order) {

this.order = order;

}

public int compareTo(User arg0) {

return this.getOrder().compareTo(arg0.getOrder());

}

}

测试一下:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18
public class Test{

public static void main(String[] args) {

User user1 = new User();

user1.setName("a");

user1.setOrder(1);

User user2 = new User();

user2.setName("b");

user2.setOrder(2);

List<User> list = new ArrayList<User>();

//此处add user2再add user1

list.add(user2);

list.add(user1);

Collections.sort(list);

for(User u : list){

System.out.println(u.getName());

}

}

}

输出结果如下

a
b

第二种方法是根据Collections.sort重载方法来实现,例如:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19
/**

* 根据order对User排序

*/

public class User { //此处无需实现Comparable接口

private String name;

private Integer order;

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public Integer getOrder() {

return order;

}

public void setOrder(Integer order) {

this.order = order;

}

}

主类中这样写即可:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22
public class Test{

public static void main(String[] args) {

User user1 = new User();

user1.setName("a");

user1.setOrder(1);

User user2 = new User();

user2.setName("b");

user2.setOrder(2);

List<User> list = new ArrayList<User>();

list.add(user2);

list.add(user1);

Collections.sort(list,new Comparator<User>(){

public int compare(User arg0, User arg1) {

return arg0.getOrder().compareTo(arg1.getOrder());

}

});

for(User u : list){

System.out.println(u.getName());

}

}

}

输出结果如下

a
b

前者代码结构简单,但是只能根据固定的属性排序,后者灵活,可以临时指定排序项,但是代码不够简洁

多字段的场合:

?

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
Collections.sort(list,newComparator<User>(){

publicintcompare(Userarg0,Userarg1){

//第一次比较专业

inti=arg0.getOrder().compareTo(arg1.getOrder());

//如果专业相同则进行第二次比较

if(i==0){

//第二次比较

intj=arg0.getXXX().compareTo(arg1.getXXX());

//如果学制相同则返回按年龄排序

if(j==0){

returnarg0.getCCC().compareTo(arg1.getCCC());

}

returnj;

}

returni;

}

});

以下是另外一个例子

?

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

79

80

81

82

83
packagetest;

importjava.util.ArrayList;

importjava.util.Collections;

importjava.util.Comparator;

publicclassArrayListTest{

publicstaticvoidmain(String[]args){

ArrayList<Exmployee>arrayList=newArrayList<Exmployee>();

arrayList.add(newExmployee("zengqiang",newInteger(5000)));

arrayList.add(newExmployee("zengmin",newInteger(4000)));

arrayList.add(newExmployee("liuxiaojuan",newInteger(4200)));

arrayList.add(newExmployee("giuming",newInteger(2200)));

Collections.sort(arrayList,newComparator<Exmployee>(){

publicintcompare(Exmployeearg0,Exmployeearg1){

returnarg1.getSalary()-arg0.getSalary();//按照工资升序

//returnarg0.getSalary()-arg1.getSalary();按照工资降序

//returnarg0.getName().compareTo(arg1.getName());按照姓名升序

}

});

for(Exmployeee:arrayList)

System.out.println(e.getName()+"'ssalaryis"+e.getSalary());

}

}

classExmployee{

publicExmployee(Stringname,intsalary){

this.name=name;

this.salary=salary;

}

privateStringname;

publicStringgetName(){

returnname;

}

publicvoidsetName(Stringname){

this.name=name;

}

publicintgetSalary(){

returnsalary;

}

publicvoidsetSalary(intsalary){

this.salary=salary;

}

privateintsalary;

}

以上这篇List集合对象中按照不同属性大小排序的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持快网idc。

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 List集合对象中按照不同属性大小排序的实例 https://www.kuaiidc.com/118427.html

相关文章

发表评论
暂无评论