当前位置:首页 » 编程语言 » java给list排序

java给list排序

发布时间: 2022-09-26 02:16:10

java 怎么将List里面数据排序

importjava.util.ArrayList;
importjava.util.Collections;
importjava.util.Comparator;
importjava.util.List;


publicclassArrayListOrder{

publicstaticvoidmain(String[]args){
List<List<Integer>>list=newArrayList<List<Integer>>();
List<Integer>arrayList1=newArrayList<Integer>();
arrayList1.add(2);
arrayList1.add(5);
arrayList1.add(6);
list.add(arrayList1);
List<Integer>arrayList2=newArrayList<Integer>();
arrayList2.add(2);
arrayList2.add(4);
arrayList2.add(6);
list.add(arrayList2);
List<Integer>arrayList3=newArrayList<Integer>();
arrayList3.add(2);
arrayList3.add(6);
arrayList3.add(6);
list.add(arrayList3);
List<Integer>arrayList4=newArrayList<Integer>();
arrayList4.add(2);
arrayList4.add(1);
arrayList4.add(6);
list.add(arrayList4);
for(List<Integer>tmpList:list){
System.out.print(tmpList.get(1)+"");
}
System.out.println("");

//排序
Collections.sort(list,newComparator<List<Integer>>(){
publicintcompare(List<Integer>list1,List<Integer>list2){
//比较每个ArrayList的第二个元素
if(list1.get(1)==list2.get(1)){
return0;
}elseif(list1.get(1)>list2.get(1)){
return1;
}else{
return-1;
}
}
});
for(List<Integer>tmpList:list){
System.out.print(tmpList.get(1)+"");
}
}
}

㈡ java的list集合如何根据对象中的某个字段排序

下面的代码是根据学生年龄排序学生list 的一个例子:

importjava.util.ArrayList;
importjava.util.List;

classStudent{

privateStringname;

privateintage;

publicStudent(Stringname,intage){
this.name=name;
this.age=age;
}

publicStringgetName(){
returnname;
}

publicvoidsetName(Stringname){
this.name=name;
}

publicintgetAge(){
returnage;
}

publicvoidsetAge(intage){
this.age=age;
}

@Override
publicStringtoString(){
return"Perosn[name="+name+",age="+age+"]";
}
}

publicclassApp{

publicstaticvoidmain(String[]args){

List<Student>students=newArrayList<>();

students.add(newStudent("abc",12));
students.add(newStudent("bcd",20));
students.add(newStudent("cde",17));
students.add(newStudent("def",25));
students.add(newStudent("efg",15));

students.sort((x,y)->Integer.compare(x.getAge(),y.getAge()));

for(Studentstu:students){
System.out.println(stu);
}
}
}

运行结果:

㈢ 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(){
List<Student>students=new ArrayList<Student>();
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!=o1&&null!=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(num1>num2){
return 1;
}else if(num1<num2){
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(){
List<Student>students=new ArrayList<Student>();
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);
SortList<Student> sortList = new SortList<Student>();
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 SortList<E> {
public void Sort(List<E> 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;
}
});
}
}

㈣ 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)
);
//
0
比较方法其实就是对字符串中的字符逐个比较ASCII
值相减,如果2个字符串是包含关系返回长度差。Collections.sort方法才是对LIST
进行排序的方法。

㈤ Java的List怎么排序啊

用Collections.sort就可以排序,
里面的排序是默认的按自然顺序排列
也就是1,2,3,4这种
参数要求实现了Comparable的数据才能排序,
如果你自己写的类,你就要实现Comparable接口,然后在接口里面自动生成的方法里面
指定排序方法,一般的String Inteneger类都是实现了这个接口的 不用自己操作的。
你可以取看源代码

㈥ java中list排序

最好是在将日期插入list前排序,即在sql查询是排序,这样比较好处理。
另一种方法是构建一个比较类或比较方法,如一楼所述。

㈦ Java的List怎么排序啊

问题在于

doubletemp=0.0;

你把temp设置成double型,然后

temp=arr.get(l).doubleValue();

所以你把取得的int类型转换成了double类型,最后输出就带上了.0


你仔细看看你的程序,int类型有的排序后没有变,有的变x.0了,凡是加上.0的都是它在排序过程中与double类型的数字进行过交换。

㈧ java 怎么将List里面数据排序

不好意思,上午只是粗略地看了一下,没有细致看,现在详细回答你的提问。


ArrayList底层是用一个长度为10的Object数组实现,不管添加进去什么类型的数据,都会转换成Object对象,除非你用很早以前的JDK版本。这样就好理解了,像你写的程序arrayList1中add了String和Integer两种类型的数据,这两类对象没有什么可比性,就像拿打火机和U盘比一个性质。所以,是没有办法进行直接排序的。


你要求的是要按ArrayList里面的第1、2、4数据进行排序,这个可以。


先来arrayList1

四个数据分别是2、"daas"、6、"1",第1、2、4数据即2、“daas”、“1”,我选择按照String类型进行排序,所以第1个数据2转换成String类型即可。因为第3个数据6不进行排序,remove就好。这是个题还是个什么,其实还是留了点活路的,因为后面的(你arrayList234下面)代码都是往arrayList1中添加的,而且还都是String类型。这也是我选择String类型进行排序的原因。代码如下:

List arrayList1 = new ArrayList();

arrayList1.add(2); //0

arrayList1.add("daas"); //1

arrayList1.add(6); //2

arrayList1.add("1"); //3

list.add(arrayList1);

//my code

String convert = String.valueOf(arrayList1.get(0));

arrayList1.remove(2);

arrayList1.remove(0);

arrayList1.add(convert);

/此处为你的arrayList234代码

Collections.sort(arrayList1);

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

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

}

结果为:

1

2

3

5

8

daas


因为怕你深挖,强调两点:

第一点,由结果看出Collections.sort(arrayList1),是以String的ASCII码进行排序的,为了证明这一点,就要看原代码,这时你就会发现JDK中String的compareTo方法是个空实现,底层并不是用java写的,这点没事,我们可以用一定的方法让它把特征暴露出来,然后就可以理解思想。你看我下面写的小测试程序就会明白。

String a = new String("Z");

String b = new String("A");

System.out.println(a.compareTo(b));

String c = new String("A");

String d = new String("B");

System.out.println(c.compareTo(d));

//看结果,证明String的自然顺序比较即比较ASCII值,只是第一步。

//看结果,证明compareTo返回值是后面的ASCII码减支前面的ASCII码,第二步。

String e = new String("g");

String f = new String("e");

String h = new String("h");

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

list.add(e);

list.add(f);

list.add(h);

Collections.sort(list);

for(String i : list) {

System.out.println(i);

}

结果为:

25

-1

e

g

h

//证明String的自然排序即ASCII码从小到大排序,最后一步。


第二点,你的要求是“要按ArrayList里面的第1、2.4数据进行排序,分别怎么做啊”,这个问题的描述有问题,或者不详细,arryList2、arrayList3、arrayList4任何一个里面一共就add了3个数据,哪来第4个。如果是分别对arrayList234里面的数据进行排序,两个选择,(1)把所有Integer转换成String类型,再排序,参考arrayList2。(2)运用Integer.valueOf()方法,将内容为数字的String数据转换成Integer,把原来的remove掉,把内容非数字的String数据remove掉,再排序,桶排序、冒泡排序、快速排序等你随便选。


讲解到这,不管想对哪个list进行排序,你应该都会写了。


总结:

  1. 除非比较ASCII码,Integer类型和内容为非数字的String类型数据是没有办法进行比较的,不管是直接比较,还是间接比较。还是上面那句话,像打火机和U盘没有可比性一样,理解这点很重要。

  2. 即使用Integer.valueOf()方法对内容为非数字的String类型数据进行转换没有用,会报NumberFormatException。说这点意思是如果你想按Integer类型排序,得把所有内容为非数字的String类型数据remove掉。


题外话:这种类型的题我记得上大学的时候有,不知道你是不是学生,今天想来,其实用处真不大,都用泛型,现在写代码不用泛型的程序员几乎是完全不存在了。


祝心情愉快~~


亲手打,如果满意,把分给我吧~~哈哈。。

㈨ JAVA中list集合的排序

根据字符串的含义,进行对象化,比如,Student,有三个属性,序号,姓名,分数
注意重写Student的Compareable接口
然后,List<String>变成List<Student> students=new ArrayList<Student>
然后,遍历list,算出平均分,放入新的SortList<Student>
打印结果

热点内容
Php面向对象模式 发布:2024-05-02 13:33:32 浏览:80
安卓手机软件如何快速打开 发布:2024-05-02 13:25:16 浏览:962
安卓网页图片不显示怎么办 发布:2024-05-02 13:16:00 浏览:673
虚拟机搭建linux 发布:2024-05-02 13:02:48 浏览:186
哈弗f7配置怎么使用 发布:2024-05-02 12:53:14 浏览:575
psv重新构建数据库 发布:2024-05-02 12:43:53 浏览:792
农行对公密码器的凭证号码在哪里 发布:2024-05-02 12:38:55 浏览:890
双子星脚本 发布:2024-05-02 12:26:01 浏览:142
域名如何将程序部署到服务器 发布:2024-05-02 12:25:38 浏览:948
命令行编译lex 发布:2024-05-02 12:17:25 浏览:61