java——List列表结构的复杂排序

1. 整型(Integer)和字符串(String)类型的简单排序

这种列表数据的类型是List<Intger>List<String>,是简单的数据类型。
可以使用以下的方法排序。

代码如下

package cn.qkongtao;/*
 *Created by tao on 2020-05-25.
 */

import java.text.Collator;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class ListSortDemo3 {

    public static void main(String[] args) {
        //对list升序排序
        List<String> list = new ArrayList();
        list.add("路飞");
        list.add("索隆");
        list.add("香吉士");
        list.add("乔巴");
        list.add("娜美");
        
        System.out.println("========原始数据=======");
        for (String s : list) {
            System.out.println(s);
        }
        //升序
        //是根据的汉字的拼音的字母排序的,而不是根据汉字一般的排序方法
        Collections.sort(list, Collator.getInstance(java.util.Locale.CHINA));
        System.out.println("========升序排列=======");
        for (String s : list) {
            System.out.println(s);
        }
        //降序(要想实现根据的汉字的拼音的字母排序,应该先按上面升序,然后按下面降序)
        Collections.reverse(list);
        System.out.println("========降序排列=======");
        for (String s : list) {
            System.out.println(s);
        }
    }
}

排序结果如下

在这里插入图片描述
可以看出是按照中文首字母的全拼进行排序的

2. 根据list中的对象Bean中的某个属性进行排序

当List泛型的类型不是Integer和String,而是自定义的JavaBean时,这是属于一种复杂的结构,当我们要根据JavaBean中的某个字段进行排序时,可以使用以下的两种方法:

java8的新特性Lambda语法

代码如下

  1. Info.java(封装类)
package cn.qkongtao.domain;/*
 *Created by tao on 2020-05-25.
 */

public class Info {
    private String name;
    private Integer age;

    public Info() {
        super();
    }

    public Info(String name, Integer age) {
        super();
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "TestA [name=" + name + ", age=" + age + "]";
    }
}

  1. ListSortDemo1.java测试类
package cn.qkongtao;/*
 *Created by tao on 2020-05-25.
 */

import cn.qkongtao.domain.Info;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.Iterator;
import java.util.List;

public class ListSortDemo1 {
    public static void main(String[] args) {
        List<Info> users = new ArrayList<Info>();
        Info user01 = new Info("张三", 18);
        Info user02 = new Info("李四", 12);
        Info user03 = new Info("王五", 26);
        Info user04 = new Info("赵六", 50);
        Info user05 = new Info("钱七", 37);
        /*Info user01 = new Info("zhangsan", 3);
        Info user02 = new Info("lisi", 1);
        Info user03 = new Info("wangwu", 2);
        Info user04 = new Info("zaoliu", 4);
        Info user05 = new Info("qianqi", 0);
        Info user06 = new Info("sunba", 9);*/    
	    users.add(user01);
        users.add(user02);
        users.add(user03);
        users.add(user04);
        users.add(user05);

        //java8遍历
        users.forEach(p -> System.out.println(p.getAge()));

        System.out.println("===排序前如下===");
        users.stream().forEach(item -> System.out.println(item));

        //根据年龄升序排序方式一
        users.sort((a, b) -> a.getAge().compareTo(b.getAge()));
        System.out.println("===根据年龄升序排序后如下方式一===");
        users.stream().forEach(item -> System.out.println(item));

        //根据年龄倒序排序方式一
        users.sort((a, b) -> b.getAge().compareTo(a.getAge()));
        System.out.println("===根据年龄降序排序后如下方式一===");
        users.stream().forEach(item -> System.out.println(item));


        //根据姓名升序排序(方式二简写)
        users.sort(Comparator.comparing(Info::getName));
        System.out.println("===根据姓名升序排序后如下方式二===");
        users.stream().forEach(item -> System.out.println(item));

        //根据姓名降序排序(方式二简写)
        users.sort(Comparator.comparing(Info::getName).reversed());
        System.out.println("===根据姓名降序排序后如下方式二===");
        users.stream().forEach(item -> System.out.println(item));


        //根据其中的某个对象的某个属性的值删除某个对象
        /*System.out.print("删除前:");
        users.stream().forEach(item -> System.out.print(item));

        Iterator<Info> it = users.iterator();
        while (it.hasNext()) {
            Info s = it.next();
            if (s.getName().equals("李四")) {
                it.remove();
            }
        }

        System.out.print("\n删除后:");
        users.stream().forEach(item -> System.out.print(item));*/
    }
}

测试结果如下

在这里插入图片描述
结果表明:如果按照整型的属性来进行排序,结果时可行的,但是按照字符串(汉字)的属性来进行排序,似乎没有按照首字的全拼来排序,而是有另外的排序规则(我也不清楚)。如果是非汉字的字符串,就会根据字母进行排序。

JavaBean实现Comparable接口

实现接口的方法是,将排序的Collator替换成中文工具类
Collator collator = Collator.getInstance(java.util.Locale.CHINA);

代码如下

  1. Info.java(实现接口的JavaBean)
package cn.qkongtao.domain;/*
 *Created by tao on 2020-05-25.
 */

import java.text.Collator;
import java.util.Comparator;

public class Info implements Comparator<Info> {
    private String name;
    private Integer age;


    public Info(String name, Integer age) {
        super();
        this.name = name;
        this.age = age;
    }

    public Info() {

    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }
	
	
    @Override
    public String toString() {
        return "TestA [name=" + name + ", age=" + age + "]";
    }

    Collator collator = Collator.getInstance(java.util.Locale.CHINA);
    //重写compare方法
    @Override
    public int compare(Info o1, Info o2) {
        return collator.compare(o1.getName(), o2.getName());
    }
}

  1. ListSortDemo4,java(测试方法)
package cn.qkongtao;/*
 *Created by tao on 2020-05-26.
 */

import cn.qkongtao.domain.Info;

import java.text.Collator;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class ListSortDemo4 {
    public static void main(String[] args) {
        List<Info> users = new ArrayList<Info>();
        Info user01 = new Info("张三", 18);
        Info user02 = new Info("李四", 12);
        Info user03 = new Info("王五", 26);
        Info user04 = new Info("赵六", 50);
        Info user05 = new Info("钱七", 37);
        Info user06 = new Info("乔巴", 37);
        users.add(user01);
        users.add(user02);
        users.add(user03);
        users.add(user04);
        users.add(user05);
        users.add(user06);
        System.out.println("========原始数据=======");
        for (Info user : users) {
            System.out.println(user);
        }

        System.out.println("========升序=======");
        Collections.sort(users, new Info());
        for (Info user : users) {
            System.out.println(user);
        }

        System.out.println("========降序=======");
        Collections.reverse(users);
        for (Info user : users) {
            System.out.println(user);
        }

    }
}

测试结果

在这里插入图片描述
最后一种方法而可以实现JavaBean复杂类型的List按某个字段首字的中文全拼进行排序。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不愿意做鱼的小鲸鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值