javalist序号

JAVA中list集合的排序

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

注意重写Student的Compareable接口

然后,ListString变成ListStudent students=new ArrayListStudent

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

打印结果

JAVA中list排序问题

分不多,不过正好我研究了这里,也算给自己做个总结:

我为了方便解释、写了一个测试类

/** test for reflex */

public class Model {

private String name;

private String content;

public Model(){

this.name = “my name”;

this.content = “a long text”;

}

public void setName(String name) {

this.name = name;

}

public String getName() {

return name;

}

public String getContent() {

return content;

}

//测试

public void test() throws Exception{

Model model = new Model();

Method m1 = model.getClass().getMethod(“getName”, null);

System.out.println(m1.invoke(model, null));

}

public static void main(String args[]){

try {

new Model().test(“getName”);

} catch (Exception e) {

e.printStackTrace();

}

}

}

首先调用test,传递一个method过去;

通过反射机制(这里用到了getMethod、invoke,我比较喜欢getField)、获取到m1对象的getName方法,getMethod第一个参数为方法名、第二个是给这个method的参数的类型,

If parameterTypes is null, it is treated as if it were an empty array,如果为null,表示没有参数;(即 getName()方法);

然后在通过 invoke 注入参数;第一个是相应对象的引用、第二个是参数值(刚刚的是类型,现在才是值);

If the underlying method is static, then the specified obj argument is ignored. It may be null,也就是说static的方法第一个参数是null;

我们要调用的是getName(),那么就是 m1.invoke(model,null)了;

执行结果为:my name ;相当于调用了getName()方法.

绕了一圈也就是 model.getName() == model.getClass().getMethod(“getName”,null).invoke(model,null);

对于有参数的,调整为

public void test(String method) throws Exception{

Model model = new Model();

Method m1 = model.getClass().getMethod(method, String.class);

m1.invoke(model, “can you”);

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

}

结果:can you

接下来上边的题目就简单了,

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

这里给出了method,接下来是一个内部类的处理;自定义一个comparator,

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

这里就是获取method方法,他没有参数。

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

这里是得到对象a调用方法method之后的返回值。

ret = m1.invoke(((E)a), null).toString().compareTo(m2.invoke(((E)b), null).toString());

而这里就是比较两个对象method方法的返回值

将ret交给sort进行排序;

就像3楼说的、真正排序的是sort方法,下面的只是对一个类中某个方法的返回值进行比较

java list 相同的字段排序

1. 集合类List存放的数据,默认是按照放入顺序排序的。我们也可以对list中某一个元素进行排序。例如;

package test.tool.gui.dbtool.util;

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

List list = new ArrayList();

2.创建3个学生对象,年龄分别是20、19、21,并将他们依次放入List中

Student s1 = new Student();

s1.setAge(20);

Student s2 = new Student();

s2.setAge(19);

Student s3 = new Student();

s3.setAge(21);

list.add(s1);

list.add(s2);

list.add(s3);

System.out.println(“排序前:”+list);

Collections.sort(list, new Comparator(){

public int compare(Student o1, Student o2) {

//按照学生的年龄进行升序排列

if(o1.getAge() o2.getAge()){

return 1;

}

if(o1.getAge() == o2.getAge()){

return 0;

}

return -1;

}

});

System.out.println(“排序后:”+list);

}

}

class Student{

private int age;

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

@Override

public String toString() {

return getAge()+””;

}

}

java 怎么将List里面数据排序

学生实体类,包含姓名和年龄属性,

比较时先按姓名升序排序,如果姓名相同则按年龄升序排序。

第一种:实体类自己实现比较

(实现comparable接口:public interface ComparableT ,里面就一个方法声明:public int compareTo(T o); )

然后利用List类的sort(Comparator? super E c)方法或java.util.Collections工具类的sort(ListT list) (其实里面就一句:list.sort(null); )进行排序:

结果:

第二种:借助比较器进行排序。

示例代码:

比较器java.util.Comparator类是一个接口(public interface ComparatorT ),包含int compare(T o1, T o2);等方法:

我们的比较器要实现该接口并实现compare方法:

比较的时候可以利用List的sort(Comparator? super E c)方法(或者java.util.Collections工具类的sort(ListT list, Comparator? super T c)方法)进行排序。

结果跟第一种方法一样:

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;

}

}

javalist序号

本文来自投稿,不代表【】观点,发布者:【

本文地址: ,如若转载,请注明出处!

举报投诉邮箱:253000106@qq.com

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2024年3月28日 04:33:58
下一篇 2024年3月28日 04:43:14

相关推荐

  • excel表格拉序号,excel表格拉序号怎么拉

    Excel表格怎么往下拉序号?Excel表格往下拉序号的教程 Excel表格往下拉序号的教程 首先在表格第一行和第二行输入2,如下图。然后选中你输入数字的这两格表格。选中之后,把鼠标指针移到有2的表格右下角(记住不要点击鼠标,是把光标移到那里。 在表格界面,首先在单元格中输入起始数字,以1为例,接着将鼠标光标放到单元格右下角,鼠标光标变成黑色加号。按住鼠标左…

    2024年5月23日
    4000
  • excel表格如何重新设置序号,excel表格怎么重新编号

    如何修改excel表格中的编号顺序 打开Excel,在单元格中输入“1”,按下Enter键。将这个单元格选中。把鼠标移到单元格右下边,看到“+”时,往下拉,选中“填充序号”即可,详细步骤:首先,打开Excel,在单元格中输入“1”,按下Enter键。 方法1 先点击编号正确的编号,采用“格式刷”工具,然后点击编号不正确的编号,即可解决。 excel怎么自动编…

    2024年5月21日
    7800
  • excel自动标序号,怎么自动标序号

    EXCEL怎么标序号 1、打开Excle。(一般首行为标题行,如下图:序号、文本、内容为例)。在序号标序号的“序号”栏输入数字“1”。将鼠标移至格子右下角,让鼠标变成黑色的“+”号。长按鼠标左键,下拉,一直到最后一行数据。 2、Excel标序号,需要用户首先在空白表格中创建一个数字,然后再继续创建另外一个数字,将创建数字选中下拉即可进行排序。具体操作步骤如下…

    2024年5月21日
    4300
  • excel一列相同项加序号,excel同一列加相同符号

    excel中,如何对某一列中重复出现的数值进行顺序编号 1、示例:想要把EXCEL中姓名一栏当中相同的人名信息排在一起 选中姓名这一列的数据,选中的标志就是表格的粗黑线,之后,依次在“开始”选项卡上选择:“编辑”-“排序和筛选”-“自定义排序”。 2、首先在电脑上用Excel打开要编辑的表格。接下来在打开的表格窗口中,我们点击上面的“数据”菜单 在打开的数据…

    2024年5月21日
    4400
  • excel单元表序号,excel跨单元表求和

    excel表格如何快速填写序号 1、方法一:打开excel表格,然在A1单元格中输入序号“1”,把鼠标移动到A1单元格的右下角,能会看到光标变成一个”十“字了。按住键盘上的Ctrl+鼠标左键,然后向单元格下方拖动鼠标,就能见到序号自动填充。 2、除了下拉还有Ctrl+Enter、双击填充、Ctrl+D与Ctrl+R、Ctrl+C与Ctrl+V等方法可以快速填…

    2024年5月20日
    4200
  • javalist排序算法的简单介绍

    用Java中ArrayList类实现一个冒泡排序 1、super T void sort(ListT list)根据元素的自然顺序 对指定列表按升序进行排序。列表中的所有元素都必须实现 Comparable 接口。 2、将数字从大到小排序的方法:例如简一点的冒泡排序,将第一个数字和后面的数字逐个比较大小,如果小于,则互换位置,大于则不动。此时,第一个数为数组…

    2024年5月18日
    4000
  • javalist中map,javalist转map

    关于java的集合,在list集合中添加map集合 Java中的集合包括三大类,它们是Set、List和Map,它们都处于java.util包中,Set、List和Map都是接口,它们有各自的实现类。 你首先要了解什么是Map,可以理解为Map是一堆key和value的映射集合(或者说一堆键值对的集合)。 foreach(User user:userList…

    2024年5月18日
    4600
  • excel筛选添加序号,excel怎么在筛选中添加序号

    怎样在excel里筛选后自动编号? 1、方法一:使用快捷键。使用快捷键是Excel表格自动排序的一种快捷方式,可快速完成操作。具体操作步骤如下选中需要进行排序的标题。使用快捷键“ALT+D+S”打开排序对话框。 2、打开要操作的 Excel 文档 同时按ctrl+L键,打开用于创建表的提示框。 3、首先,先打开excel程序,打开一张要制作的表格,输入内容。…

    2024年5月16日
    7800
  • excel表格序号居中,excel表格序号居中不了

    excel怎么让表格居中 在表格里点击单元格。鼠标右键单元格并点击单元格设置。在单元格设置中点击对齐。在选择水平居中后点击确定即可。需要在电脑上双击运行Excel表格。在单元格内随便输入一些文字内容。 打开excel表格,在A1单元格内输入文字,可以看到此时文字在单元格的左下方。选中单元格,点击鼠标右键,在弹出的选项中点击“设置单元格格式”。在“对齐”选项中…

    2024年5月15日
    5400
  • wpsexcel序号怎么生成,wps如何自动生成序号

    excel如何自动生成序号 方法一:在B4单元格输入1,B5单元格输入2,选中B4:B5单元格,移动鼠标到选中区域右下角,鼠标变成十字形,按下鼠标左键向下拖拽自动递增序号。 方法一:打开excel表格,然在A1单元格中输入序号“1”,把鼠标移动到A1单元格的右下角,能会看到光标变成一个”十“字了。按住键盘上的Ctrl+鼠标左键,然后向单元格下方拖动鼠标,就能…

    2024年5月15日
    4100

发表回复

登录后才能评论



关注微信