首页 > 编程知识 正文

java中list的多条件排序(java 多条件排序)

时间:2023-12-23 21:12:52 阅读:319554 作者:DAWV

本文目录一览:

集合List根据多个字段进行排序

        最近用java抓取数据的时候,遇到了需要对拿到的List集合按照多个字段进行排序。首先得让排序的实体类实现Comparable类并且重写它的compareTo方法,在compareTo中你可以自定义排序的规则。如果前者大于后者,则返回1,若果相等则返回0,若果前者小于后者,则返回-1;String字符串比较的时候也会经常用到这个compareTo方法,查看String类,可以看到它也实现了Comparable类。

String类

新建一个User类:按照id升序,age降序来排序。

再建一个Junit测试类

排序结果

java 中 List 怎么排序呢

MapString, String map =new HashMapString, String();

java.util.ListString list=new ArrayListString();

map.put("a", "a");

map.put("c", "c");

map.put("b", "b");

list.addAll(map.keySet());

Collections.sort(list);

for (String key : list)

{

System.out.println(map.get(key));

}

直接Copy 到main方法中运行, 是个降序! 升序的话 Collections 这里面也有的。

楼主 太抠门, 5分都不给!

JAVA中list集合的排序

根据字符串的含义,进行对象化,比如,Student,有三个属性,序号,姓名,分数

注意重写Student的Compareable接口

然后,ListString变成ListStudent students=new ArrayListStudent

然后,遍历list,算出平均分,放入新的SortListStudent

打印结果

java中list排序

第一种方法,就是list中对象实现Comparable接口,代码如下:

public class Person implements ComparablePerson {

private String name;

private Integer order;

/**

* @return the name

*/

public String getName() {

return name;

}

/**

* @param name

* the name to set

*/

public void setName(String name) {

this.name = name;

}

/**

* @return the order

*/

public Integer getOrder() {

return order;

}

/**

* @param order

* the order to set

*/

public void setOrder(Integer order) {

this.order = order;

}

@Override

public int compareTo(Person arg0) {

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

}

}

public static void main(String[] args) {

ListPerson listA = new ArrayListPerson();

Person p1 = new Person();

Person p2 = new Person();

Person p3 = new Person();

p1.setName("name1");

p1.setOrder(1);

p2.setName("name2");

p2.setOrder(2);

p3.setName("name3");

p3.setOrder(3);

listA.add(p2);

listA.add(p1);

listA.add(p3);

Collections.sort(listA);

for (Person p : listA) {

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

}

}

第二种方法,就是在重载Collections.sort方法,代码如下:

public class Person {

private String name;

private Integer order;

/**

* @return the name

*/

public String getName() {

return name;

}

/**

* @param name

* the name to set

*/

public void setName(String name) {

this.name = name;

}

/**

* @return the order

*/

public Integer getOrder() {

return order;

}

/**

* @param order

* the order to set

*/

public void setOrder(Integer order) {

this.order = order;

}

}

public static void main(String[] args) {

ListPerson listA = new ArrayListPerson();

Person p1 = new Person();

Person p2 = new Person();

Person p3 = new Person();

p1.setName("name1");

p1.setOrder(1);

p2.setName("name2");

p2.setOrder(2);

p3.setName("name3");

p3.setOrder(3);

listA.add(p2);

listA.add(p1);

listA.add(p3);

Collections.sort(listA, new ComparatorPerson() {

public int compare(Person arg0, Person arg1) {

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

}

});

for (Person p : listA) {

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

}

}

两次执行的结果都是:

name1

name2

name3

JAVA中list排序问题

compareTo

只是比较2个字符串,不能进行排序

String

s1

=

"abc";

String

s2

=

"abcd";

String

s3

=

"abcdfg";

String

s4

=

"1bcdfg";

String

s5

=

"cdfg";

String

s6="abc";

System.out.println(

s1.compareTo(s2)

);

//

-1

(前面相等,s1长度小1)

System.out.println(

s1.compareTo(s3)

);

//

-3

(前面相等,s1长度小3)

System.out.println(

s1.compareTo(s4)

);

//

48

("a"的ASCII码是97,"1"的的ASCII码是49,所以返回48)

System.out.println(

s1.compareTo(s5)

);

//-2

System.out.println(

s1.compareTo(s6)

);

//

比较方法其实就是对字符串中的字符逐个比较ASCII

值相减,如果2个字符串是包含关系返回长度差。Collections.sort方法才是对LIST

进行排序的方法。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。