「javalist排序」javalist排序多属性排序

博主:adminadmin 2023-03-18 02:43:09 472

今天给各位分享javalist排序的知识,其中也会对javalist排序多属性排序进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

java list 字符精确排序 例如: a1 a12 a13 a2 a3 排序后是:a1 a2 a3 a12 a13 ,不是a1 a12 a13 a2 a3

package test;

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) {

ListString list = new ArrayListString();

list.add("3");list.add("a1");list.add("a12");list.add("a13");list.add("a2");

list.add("a3");list.add("c1");list.add("b2");list.add("d1");

list.add("b1");list.add("c3");list.add("2");list.add("1");

System.out.println("排序前------"+list);

Collections.sort(list, new ComparatorString() {

String regNum = "[\\d]";//数字字符

String regStr = "[^\\d]";//非数字字符

@Override

public int compare(String o1, String o2) {

int num1 = Integer.parseInt(o1.replaceAll(regStr, ""));

int num2 = Integer.parseInt(o2.replaceAll(regStr, ""));

String str1 = o1.replaceAll(regNum, "");

String str2 = o2.replaceAll(regNum, "");

//都有字母

if( ! isnull(str1) ! isnull(str2)){

if(str1.compareTo(str2) 0){

return 1;

}else if(str1.compareTo(str2) 0){

return -1;

}else{

return num1-num2;

}

}else{//存在数字

//都是数字

if(isnull(str1) isnull(str2)){

return num1 - num2;

}else if(isnull(str1) ! isnull(str2)){//数字排前面:o1是数字,o2不是数字

return -1;

}else if(! isnull(str1) isnull(str2)){//数字排前面:o1不是数字,o2是数字

return 1;

}else{

return 0;

}

}

}

});

System.out.println("排序后======"+list);

}

private static boolean isnull(String str){

return str == null || str.trim().length() == 0;

}

}

Java的List怎么排序啊?

用Collections.sort就可以排序,

里面的排序是默认的按自然顺序排列

也就是1,2,3,4这种

参数要求实现了Comparable的数据才能排序,

如果你自己写的类,你就要实现Comparable接口,然后在接口里面自动生成的方法里面

指定排序方法,一般的String Inteneger类都是实现了这个接口的 不用自己操作的。

你可以取看源代码

java中list中的排序问题

import java.util.ArrayList;

import java.util.List;

import java.util.Scanner;

public class BuyFeiJiPiao{

public void buyNum(int num){

if(0 num num = 10){

System.out.println("价格:¥"+(1000*num*0.9));

}else if(10 num num = 20){

System.out.println("价格:¥"+(1000*num*0.8));

}else{

System.out.println("价格:¥"+(1000*num*0.7));

}

}

public void buyDaZe(int num){

switch (num) {

case 9:

System.out.println("打折数量范围:1 - 10");

break;

case 8:

System.out.println("打折数量范围:11 - 20");

break;

case 7:

System.out.println("打折数量大于20张");

break;

default:

break;

}

}

public static void main(String[] args) {

ListInteger l = new ArrayListInteger();

l.add(1);

l.add(4);

l.add(40);

l.add(24);

l.add(7);

l.add(30);

l.add(15);

l.add(19);

l.add(50);

for(int j = 0 ; j l.size()-1 ; j++){

for(int i = j ; i l.size()-1 ; i++){

int b = 0 ;

if(l.get(i) l.get(i+1)){

b = l.get(i);

l.set(i, l.get(i+1));

l.set(i+1, b);

}

}

}

System.out.println("升序:");

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

System.out.println(l.get(i));

}

System.out.println("降序:");

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

System.out.println(l.get(l.size()-i-1));

}

}

}

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

进行排序的方法。

JAVA中list集合的排序

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

注意重写Student的Compareable接口

然后,ListString变成ListStudent students=new ArrayListStudent

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

打印结果

java怎么对list进行排序

1,使用Comparator 接口

Student类 结构如下:(省略getter,setter方法)

public class Student {

/***

* 姓名

*/

private String name;

private int age;

private String address;

/***

* 考试得分

*/

private int score;

//省略getter,setter方法

@Override

public String toString() {

return "Student [name=" + name + ", age=" + age + ", score=" + score

+ "]";

}

}

测试方法:

@Test

public void test_ListComparator(){

ListStudentstudents=new ArrayListStudent();

Student stu=null;

stu=new Student();

stu.setName("whuang");

stu.setAge(12);

stu.setScore(80);

students.add(stu);

stu=new Student();

stu.setName("rong");

stu.setAge(11);

stu.setScore(90);

students.add(stu);

stu=new Student();

stu.setName("zhu");

stu.setAge(15);

stu.setScore(100);

students.add(stu);

Collections.sort(students,new SystemHWUtil. ListComparator(true,"age"));

System.out.println(students);

}

运行结果:

[Student [name=rong, age=11, score=90], Student [name=whuang, age=12, score=80], Student [name=zhu, age=15, score=100]]

核心类:

public static class ListComparator implements Comparator{

/***

* 是否转化为Int之后再比较

*/

private boolean isConvertInteger;

/***

* 对哪个列进行排序

*/

private String comparedProperty;

public ListComparator(boolean isConvertInteger,String comparedProperty) {

super();

this.isConvertInteger = isConvertInteger;

this.comparedProperty=comparedProperty;

}

public int compare(Object o1, Object o2) {

if(null!=o1null!=o2)

{

try {

Object obj1=ReflectHWUtils.getObjectValue(o1, comparedProperty);

Object obj2=ReflectHWUtils.getObjectValue(o2, comparedProperty);

if(isConvertInteger){

int num1;

int num2;

if(obj1 instanceof Integer){

num1=(Integer)obj1;

num2=(Integer)obj2;

}else{

num1=Integer.parseInt(obj1.toString());

num2=Integer.parseInt(obj2.toString());

}

if(num1num2){

return 1;

}else if(num1num2){

return -1;

}else{

return 0;

}

}else{

return obj1.toString().compareTo(obj2.toString());

}

} catch (SecurityException e) {

e.printStackTrace();

} catch (NoSuchFieldException e) {

e.printStackTrace();

} catch (IllegalArgumentException e) {

e.printStackTrace();

} catch (IllegalAccessException e) {

e.printStackTrace();

}

}

return 0/*等于*/;

}

}

2,可以指定是升序还是降序

实例:

@Test

public void test_ListComparator(){

ListStudentstudents=new ArrayListStudent();

Student stu=null;

stu=new Student();

stu.setName("whuang");

stu.setAge(12);

stu.setScore(80);

students.add(stu);

stu=new Student();

stu.setName("rong");

stu.setAge(11);

stu.setScore(90);

students.add(stu);

stu=new Student();

stu.setName("zhu");

stu.setAge(15);

stu.setScore(100);

students.add(stu);

SortListStudent sortList = new SortListStudent();

sortList.Sort(students, "getAge", "asc");

System.out.println(students);

}

注意:sortList.Sort 的第二个参数是方法名,不是成员变量名.

核心代码

package com.common.util;

import java.lang.reflect.InvocationTargetException;

import java.lang.reflect.Method;

import java.util.Collections;

import java.util.Comparator;

import java.util.List;

public class SortListE {

public void Sort(ListE list, final String method, final String sort) {

Collections.sort(list, new Comparator() {

public int compare(Object a, Object b) {

int ret = 0;

try {

Method m1 = ((E) a).getClass().getMethod(method, null);

Method m2 = ((E) b).getClass().getMethod(method, null);

if (sort != null "desc".equals(sort))// 倒序

ret = m2.invoke(((E) b), null).toString()

.compareTo(m1.invoke(((E) a), null).toString());

else

// 正序

ret = m1.invoke(((E) a), null).toString()

.compareTo(m2.invoke(((E) b), null).toString());

} catch (NoSuchMethodException ne) {

System.out.println(ne);

} catch (IllegalAccessException ie) {

System.out.println(ie);

} catch (InvocationTargetException it) {

System.out.println(it);

}

return ret;

}

});

}

}

javalist排序的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于javalist排序多属性排序、javalist排序的信息别忘了在本站进行查找喔。