「javalist排序」javalist排序多属性排序
今天给各位分享javalist排序的知识,其中也会对javalist排序多属性排序进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
- 1、java list 字符精确排序 例如: a1 a12 a13 a2 a3 排序后是:a1 a2 a3 a12 a13 ,不是a1 a12 a13 a2 a3
- 2、Java的List怎么排序啊?
- 3、java中list中的排序问题
- 4、JAVA中list排序问题
- 5、JAVA中list集合的排序
- 6、java怎么对list进行排序
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排序的信息别忘了在本站进行查找喔。