精华内容
下载资源
问答
  • 1.简单类型:Collections.sort(list, new Comparator(){public int compare(int o1, int o2) {return o1 -...Collections.sort(list, new Comparator(){public int compare(String o1, String o2) {return o1.length...

    1.简单类型:

    Collections.sort(list, new Comparator(){

    public int compare(int o1, int o2) {

    return o1 - o2;

    }

    });

    Collections.sort(list, new Comparator(){

    public int compare(String o1, String o2) {

    return o1.length() - o2.length();

    }

    });

    2.复杂类型(对象):

    Collections.sort(list, new Comparator(){

    public int compare(Emp o1, Emp o2) {

    return o1.getSalary() - o2.getSalary();

    }

    });

    3.举个栗子:(根据学生成绩等级排序,A、B、C、D,把等级转换成字符的ASCII值进行排序)

    public static void main(String[] args) {

    List list = new ArrayList<>();

    Sutdent sutdent1 = new Sutdent();

    sutdent1.setGrade("B");

    list.add(sutdent1);

    Sutdent sutdent2 = new Sutdent();

    sutdent2.setGrade("A");

    list.add(sutdent2);

    for (Sutdent sutdent : list) {

    System.out.println("排序前:" + sutdent.getGrade());

    }

    // list排序

    Collections.sort(list, new Comparator() {

    @Override

    public int compare(Sutdent s1, Sutdent s2) {

    String grade1 = s1.getGrade();

    String grade2 = s2.getGrade();

    int num1 = 0;

    int num2 = 0;

    if (StringUtils.isNotBlank(grade1) && StringUtils.isNotBlank(grade2)) { // 判空

    char[] chars1 = grade1.toCharArray();

    for (char c : chars1) {

    num1 += (int)c;

    }

    char[] chars2 = grade2.toCharArray();

    for (char c : chars2) {

    num2 += (int)c;

    }

    System.out.println("num1:" + num1);

    System.out.println("num2:" + num2);

    return num1 - num2;

    } else {

    return 0;

    }

    }

    });

    for (Sutdent sutdent : list) {

    System.out.println("排序后:" + sutdent.getGrade());

    }

    }

    ce0bb8b300d2dc96d52d85fff42f4559.png

    展开全文
  • 知识点Comparable接口实现了该接口的对象,必须重写compareTo方法,对象实现了该接口,则该对象具有排序功能,比如String、Integer等。Comparator接口要实现自定义排序器的时候,需要实现该接口。当某个类不具备排序...

    在平时开发的过程中,经常会遇到需要对数组、集合中元素按规则进行排序,本文记录在开发过程中可能遇到的情况以及相关的完整代码示例。

    知识点

    Comparable接口

    实现了该接口的对象,必须重写compareTo方法,对象实现了该接口,则该对象具有排序功能,比如String、Integer等。

    Comparator接口

    要实现自定义排序器的时候,需要实现该接口。当某个类不具备排序功能或者已有的排序功能不足以支撑你需求的时候,就是自定义排序器登场的时候了。比如String内置的排序实现按字符顺序排序,那我想按字符串长度排序咋办呢?这时就可以自定义实现Comparator的对象了。

    数组(比如String[])排序使用Arrays.sort

    集合(比如List)排序使用Collections.sort

    实例

    1. 默认String排序示例

    1.1 数组排序用法

    String[] strArr = new String[]{"zhangsan","lisi","wangwu"};

    //数组默认按字符升序排序

    Arrays.sort(strArr);

    System.out.println("默认按字母升序排序:");

    for (String str:strArr) {

    System.out.println(str);

    }

    1.2 集合排序用法

    List strList = new ArrayList<>();

    strList.add("zhangsan");

    strList.add("lisi");

    strList.add("wangwu");

    //集合默认按字符升序排序

    Collections.sort(strList);

    System.out.println("默认按字母升序排序:");

    for (String str:strList) {

    System.out.println(str);

    }

    以上两个例子都是输出:

    98b3faf324a5

    在这里插入图片描述

    2.自定义排序器,String数组按字符串长度倒序

    创建自定义排序器StringComparator

    package com.simon.interfacedemo.sortdemo.stringdemo;

    import java.util.Comparator;

    /**

    * @Description: 通过实现Comparator接口,实现自定义排序

    */

    public class StringComparator implements Comparator{

    /**

    * 按字符串长度降序排序

    */

    @Override

    public int compare(String o1, String o2) {

    return o1.length() > o2.length() ? -1 : 1;

    }

    }

    2.1 数组使用StringComparator排序器

    String[] strArr = new String[]{"zhangsan","lisi","wangwu"};

    //自定义排序,按字符串长度升序

    Arrays.sort(strArr,new StringComparator());

    System.out.println("自定义排序,按字符串长度降序排序:");

    for (String str:strArr) {

    System.out.println(str);

    }

    2.2 集合使用StringComparator排序器

    List strList = new ArrayList<>();

    strList.add("zhangsan");

    strList.add("lisi");

    strList.add("wangwu");

    //自定义排序,按字符串长度降序

    Collections.sort(strList,new StringComparator());

    System.out.println("自定义排序,按字符串长度降序排序:");

    for (String str:strList) {

    System.out.println(str);

    }

    以上两个例子都是输出:

    98b3faf324a5

    在这里插入图片描述

    3.自定义类实现Comparable接口,使类具有排序功能

    自定义Student类,实现Comparable接口,重写compareTo方法,按age升序排序

    public class Student implements Comparable{

    private String name;

    private Integer age;

    public Student(String name,Integer age){

    this.name = name;

    this.age = age;

    }

    public String getName() {

    return name;

    }

    /**

    * 实现compareTo接口方法,按age升序。

    * @param o

    * @return 返回1:大于,0:等于,-1:小于

    */

    @Override

    public int compareTo(Student o) {

    return Integer.compare(age,o.age);

    }

    /**

    * 重写toString方法,方便System.out.println打印出详细的信息。

    */

    @Override

    public String toString() {

    return "Student{" +

    "name='" + name + '\'' +

    ", age=" + age +

    '}';

    }

    }

    3.1 Student数组按age升序排序

    Student[] students = new Student[3];

    students[0] = new Student("zhangsan",30);

    students[1] = new Student("lisi",28);

    students[2] = new Student("wangwu",33);

    System.out.println("通过student实现的默认排序,根据age升序排序:");

    Arrays.sort(students);

    for (Student student : students) {

    System.out.println(student);

    }

    3.2 Student集合按age升序排序

    List studentList = new ArrayList<>();

    studentList.add(new Student("zhangsan",30));

    studentList.add(new Student("lisi",28));

    studentList.add(new Student("wangwu",33));

    System.out.println("通过student实现的默认排序,根据age升序排序:");

    Collections.sort(studentList);

    for (Student student : studentList) {

    System.out.println(student);

    }

    以上两个例子都是输出:

    98b3faf324a5

    在这里插入图片描述

    4.自定义排序器,按Student的name长度升序排序

    创建自定义排序器StudentComparator

    package com.simon.interfacedemo.sortdemo.studentdemo;

    import java.util.Comparator;

    /**

    * @Description: 通过实现Comparator接口,实现自定义排序

    */

    public class StudentComparator implements Comparator{

    /**

    * 按名字长度升序排序

    */

    @Override

    public int compare(Student o1, Student o2) {

    return o1.getName().length() > o2.getName().length() ? 1 : -1;

    }

    }

    4.1 数组使用StudentComparator排序器

    Student[] students = new Student[3];

    students[0] = new Student("zhangsan",30);

    students[1] = new Student("lisi",28);

    students[2] = new Student("wangwu",33);

    System.out.println("通过自定义排序器实现的排序,根据名字长度排序:");

    Arrays.sort(students,new StudentComparator());

    for (Student student : students) {

    System.out.println(student);

    }

    4.2 集合使用StudentComparator排序器

    List studentList = new ArrayList<>();

    studentList.add(new Student("zhangsan",30));

    studentList.add(new Student("lisi",28));

    studentList.add(new Student("wangwu",33));

    System.out.println("通过自定义排序器实现的排序,根据名字长度排序:");

    Collections.sort(studentList,new StudentComparator());

    for (Student student : students) {

    System.out.println(student);

    }

    以上两个例子都是输出:

    98b3faf324a5

    在这里插入图片描述

    后续

    以上列出了实际开发中可能用到的数组、集合的排序方式。使用lambda还可以更简化,后续再总结出来。

    以上示例都可以通过我的GitHub获取完整的代码,点击获取

    展开全文
  • import java.util.ArrayList;import java.util.Collections;import java.util.List;import java.util.Random;/*** 随机生成10条不重复的字符串,并对这个字符串进行排序* @author Administrator*...

    第一次发布手记,还请多多指教

    package com.imooc.collection;

    import java.util.ArrayList;

    import java.util.Collections;

    import java.util.List;

    import java.util.Random;

    /**

    * 随机生成10条不重复的字符串,并对这个字符串进行排序

    * @author Administrator

    *

    */

    public class CollectionSort {

    public void testSort(){

    List stringList=new ArrayList();//新建一个String类型的字符串

    Random random=new Random();//建立一个Random类型的引用

    String orignString="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";

    for(int i=0;i<10;i++){

    int length=(random.nextInt(10)+1);//随机生成10(包含10)以内的字符长度

    StringBuilder sb=new StringBuilder();//每次新建一个StringBuilder对象,用于添加字符

    String str=null;

    do{

    for(int j=0;j

    int point=random.nextInt(orignString.length());//随机指定初始字符的位置

    char cr=orignString.charAt(point);//获取指定位置的字符

    sb.append(cr);//把字符添加到StringBuider对象中

    }

    }while(stringList.contains(str));

    System.out.println("第"+(i+1)+"个元素:"+sb.toString());

    str=sb.toString();//转化为字符串

    stringList.add(str);//把生成的字符串元素添加到集合中去

    }

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

    int i=1;

    for(String str:stringList){

    System.out.println("第"+i+"个元素:"+str);

    i++;

    }

    Collections.sort(stringList);//调用排序的方法

    System.out.println("-------排序后---------");

    i=1;

    for(String str:stringList){

    System.out.println("第"+i+"个元素:"+str);

    i++;

    }

    }

    public static void main(String[] args) {

    CollectionSort cs=new CollectionSort();

    cs.testSort();

    }

    }

    展开全文
  • Java 8 对 List 排序import java.util.ArrayList;import java.util.List;import java.util.stream.Collectors;/*** @author libin* @date 2018/12/14 13:36:34*/public class Test {public static void main(String...

    Java 8 对 List 排序

    import java.util.ArrayList;

    import java.util.List;

    import java.util.stream.Collectors;

    /**

    * @author libin

    * @date 2018/12/14 13:36:34

    */

    public class Test {

    public static void main(String[] args) {

    List> stulist = new ArrayList>();

    List list1 = new ArrayList();

    List list2 = new ArrayList();

    List list3 = new ArrayList();

    List list4 = new ArrayList();

    list1.add("1");

    list1.add("张三");

    list1.add("D");

    list2.add("2");

    list2.add("李四");

    list2.add("B");

    list3.add("3");

    list3.add("王五");

    list3.add("A");

    list4.add("4");

    list4.add("赵六");

    list4.add("C");

    stulist.add(list3);

    stulist.add(list4);

    stulist.add(list1);

    stulist.add(list2);

    System.out.println(stulist);

    // Java 8 对List>排序代码

    stulist = stulist.stream().sorted((o1, o2) -> {

    for (int i = 0; i < Math.min(o1.size(), o2.size()); i++) {

    int c = o1.get(2).compareTo(o2.get(2));

    if (c != 0) {

    return c;

    }

    }

    return Integer.compare(o1.size(), o2.size());

    }).collect(Collectors.toList());

    System.out.println(stulist);

    stulist = stulist.stream().sorted((o1, o2) -> {

    for (int i = 0; i < Math.min(o1.size(), o2.size()); i++) {

    int c = Integer.valueOf(o1.get(0)).compareTo(Integer.valueOf(o2.get(0)));

    if (c != 0) {

    return c;

    }

    }

    return Integer.compare(o1.size(), o2.size());

    }).collect(Collectors.toList());

    System.out.println(stulist);

    }

    }

    点击查看结果

    ```

    [[3, 王五, A], [4, 赵六, C], [1, 张三, D], [2, 李四, B]]

    [[3, 王五, A], [2, 李四, B], [4, 赵六, C], [1, 张三, D]]

    [[1, 张三, D], [2, 李四, B], [3, 王五, A], [4, 赵六, C]]

    ```

    展开全文
  • } } public static List listAll() { Set byLocale = new TreeSet(); // Gather them all up. for (Locale locale : Locale.getAvailableLocales()) { final String isoCountry = locale.getDisplayCountry(); if ...
  • 排序import java.util.ArrayList;import java.util.List;import java.util.stream.Collectors;/*** @author libin* @date 2018/12/14 13:36:34*/public class Test {public static void main(String...
  • 今天做了一个list数组的循环问题,想着...代码如下:public static void main(String arg[]){//echarts:自定义函数,有name(String)、value(int)两个属性List list = new ArrayList();list.add(new echarts("a",310...
  • 然后要根据storm计算的分数进行排序,分数的类型为String所以就需要用到自定义排序,出于项目机密,自己编写一个.java文件进行记录分享。代码如下:package test.collection.list;import java.util.ArrayList;import...
  • Lambda用到了JDK8自带的一个函数式接口Comparator。准备一个Apple类public class ...private String color;public Apple(){}public Apple(int weight) {this.weight = weight;}public Apple(int weight, String ...
  • Java List 自定义排序

    2021-02-05 13:40:03
    不多说直接看代码: package leecode.sort; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; /** * @author: zjf ... public static void main(String[] a
  • @param sortMode 排序方式:ASC,DESC 任选其一 */public static void sortList(List list, final String sortField, final String sortMode) {if(list == null || list.size() < 2) {return;}Collections.sort...
  • 创建完List之后,往其中添加十条随机字符串2.每条字符串的长度为10以内的随机整数(最好不要是0,程序中避免了0)3.每条字符串的每个字符都为随机生成的字符,字符可以重复4.每条随机字符串不可重复package lu.zhang;...
  • 对象类实现继承Comparable接口重写compareTo方法实现排序功能,重写equals方法实现去重功能(根据ID去重)public class TestAbilityAnalyze implements Comparable {private String abilityID;/*** 能力名称*/private ...
  • 第一种方法:就是list中对象(bean文件)实现Comparable接口,代码如下:package com.mapred.entity;public class Bar implements Comparable{private String id;private String hexValue ;public String getId() {...
  • 以下介绍五种-不同的方法去除 Java 中ArrayList中的重复数据1.使用LinkedHashSet删除arraylist中的重复数据LinkedHashSet是在一个ArrayList删除重复数据的最佳方法。LinkedHashSet在内部完成两件事:删除重复数据...
  • import java.net.SocketException;import java.net.UnknownHostException;import java.util.ArrayList;import java.util.Collections;import java.util.Comparator;import java.util.LinkedHashMap;import java.util...
  • 以下介绍五种-不同的方法去除Java中ArrayList中的重复数据,拉勾IT课小编为大家分解1.使用LinkedHashSet删除arraylist中的重复数据LinkedHashSet是在一个ArrayList删除重复数据的最佳方法。LinkedHashSet在内部完成...
  • javalist集合string类型排序 //按月份升序排序 Collections.sort(overList, (o1, o2) -> { if (Integer.valueOf(o1.getSalesMonth()) - Integer.valueOf(o2.getSalesMonth()) >= 0) { return 1; }...
  • 1.java提供的默认list排序方法主要代码:List list = new ArrayList();list.add("刘媛媛");list.add("王硕");list.add("李明");list.add("刘迪");list.add("刘布");//升序Collections.sort(list,Collator....
  • import java.util.*;public class EntrySets {public static void main(String[] args) {Map map = new HashMap();map.put("k1", "v1");map.put("k2", "v2");getItem(map);List kk = new ArrayList();kk.add("1");kk...
  • 本文整理自CSDN博客专家骆昊的技术博客,当前此博客的粉丝量已经破万人,访问量将近突破300万次,由其是这套java面试题合集,更是受到大家的喜爱,访问量已经突破150万次。目前作者在本公司担任专家讲师,下面小编...
  • 本文介绍在List中根据列表中Map的key值或者value值排序通过业务,我们得到了一个放着Map的列表List,根据Map某个key的value排序可以这样实现:重写排序方法:Collections.sort()List> myList = new ArrayList<&...
  • 快速排序 采用了数组排序list集合排序 两种方式,其中 以num 来排序处理。import java.util.ArrayList;import java.util.List;public class QuickSortTest {/* 测试的入口 未完待续*/public static void main...
  • class User {String name;String age;public User(String name,String age){this.name=name;this.age=age;}public String getAge() {return age;}public void setAge(String age) {this.age = age;}public String ge...
  • //一个POJO例子class User {String name;String age;public User(String name,String age){this.name=name;this.age=age;}public String getAge() {return age;}public void setAge(String age) {this.age = age;}...
  • xy排序就相当于在x的空位插上y,x只有两个空位,y插前面得带yx,y插后面得到xyxyz排序就相当于在xy排序的所有结果插上z,结果如图代码实现如下publicstaticvoidmain(String[]args){Listlist=sort("xy","k");...
  • public void sort(List list, final String method, final String sort) {if (list != null) {Collections.sort(list, new Comparator() {public int compare(Object a, Object b) {int result = 0;try {Method m1 =...
  • Comparator cmp = new Comparator() {public int compare(Person o1, Person o2) {Comparator cmp = Collator.getInstance(java.util.Locale.CHINA);String[] strs1 = new String[2];strs1[0] = o1.getName1();strs1...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,607
精华内容 1,042
关键字:

javaliststring排序

java 订阅