美文网首页
java对象集合排序集锦

java对象集合排序集锦

作者: 风一样的存在 | 来源:发表于2019-03-08 11:03 被阅读0次
对象集合排序基本分为3种:
  • 对象内部实现Comparable接口
  • 对象内部没有实现Comparable接口,排序的时候实现Comparator接口
  • 使用jdk1.8的stream流进行排序
package com.stephen.learning.sort;

import com.google.common.collect.Lists;
import org.apache.commons.beanutils.BeanComparator;
import org.apache.commons.collections4.ComparatorUtils;
import org.apache.commons.collections4.comparators.ComparableComparator;
import org.apache.commons.collections4.comparators.ComparatorChain;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;

/**
 * @Auther: jack
 * @Date: 2018/9/5 17:28
 * @Description: 排序工具类
 */
public class SortUtil {
    /**
     * 实现Comparable
     */
    public static void sortCollection(){
        List<Teacher> list=initTeachers();
        Collections.sort(list);
        System.out.println(list);
    }

    /**
     * 没有实现Comparable,实现Comparator
     */
    public static void sortCollection1(){
        List<Student> list=initStudents();
        Collections.sort(list, new Comparator<Student>() {
            @Override
            public int compare(Student o1, Student o2) {
                return o2.getAge()-o1.getAge();
            }
        });
        System.out.println(list);
    }

    /**
     * 多个Comparator排序(以前的逻辑是层层嵌套,一级比较相等继续第二级)
     */
    public static void sortCollection2(){
        List<Student> list=initStudents();
        Comparator comparator=ComparableComparator.INSTANCE;
        //逆序
        comparator=ComparatorUtils.reversedComparator(comparator);

        Comparator comparator2=ComparableComparator.INSTANCE;
        List<Comparator> comparators=new ArrayList<>();
        comparators.add(new BeanComparator("age",comparator));
        comparators.add(new BeanComparator("score",comparator2));
        //创建一条比较器链
        ComparatorChain comparatorChain=new ComparatorChain(comparators);
        Collections.sort(list,comparatorChain);
        System.out.println(list);
    }

    /**
     * 使用jdk1.8 lamada表达式排序
     */
    public static void sortCollection3(){
        List<Student> list=initStudents();
        list=list.stream().sorted(Comparator.comparing(Student::getAge).reversed().
                thenComparing(Student::getScore)).collect(Collectors.toList());
        System.out.println(list);
    }



    private static List<Student> initStudents(){
        List<Student> list= Lists.newArrayList();
        list.add(Student.builder().name("jack").age(18).score(100).build());
        list.add(Student.builder().name("mary").age(20).score(99).build());
        list.add(Student.builder().name("peter").age(19).score(88).build());
        list.add(Student.builder().name("jenny").age(17).score(98).build());
        list.add(Student.builder().name("alice").age(18).score(78).build());
        return list;
    }

    private static List<Teacher> initTeachers(){
        List<Teacher> list=Lists.newArrayList();
        list.add(Teacher.builder().name("teacher").age(32).build());
        list.add(Teacher.builder().name("teacher2").age(40).build());
        list.add(Teacher.builder().name("teacher3").age(34).build());
        list.add(Teacher.builder().name("teacher4").age(56).build());
        list.add(Teacher.builder().name("teacher5").age(23).build());
        return list;
    }

    public static void main(String[] args) {
        SortUtil.sortCollection();
        SortUtil.sortCollection1();
        SortUtil.sortCollection2();
        SortUtil.sortCollection3();

    }
}
github地址:https://github.com/doraemon4/goodProgramming

相关文章

  • java对象集合排序集锦

    对象集合排序基本分为3种: 对象内部实现Comparable接口 对象内部没有实现Comparable接口,排序的...

  • java 对象数组排序

    java对象List集合的排序(基本类型相似); 方法一:使用for循环的方式来进行对象List集合的排序;方法二...

  • 【集合框架】

    集合框架(怎么实现、适用场景) hash相关 Java集合框架 Java集合框架综述Java集合框架面试问题集锦 ...

  • Collection

    参考地址:Java集合常见面试题集锦Java集合必会14问(精选面试题整理) Java中Collection和Co...

  • Java8和Guava处理集合排序

    Guava Guava简单的操作 Java8 排序 四中方式实现根据第一个集合对第二个排序 对象操作 两个集合根据...

  • Comparable 和 Comparator比较

    对集合或数组进行排序有两种方法:1.集合中的对象所属的类实现了java.lang.Comparable 接口,然后...

  • 知识总结:Java集合对象排序

    1.List排序 这个和数组的排序又不一样了。 其实Java针对数组和List的排序都有实现,对数组而言,你可以直...

  • 三、Java面向对象-集合排序

    List字符串排序顺序如下: 默认按照首字母顺序排序 首字母相同的情况下,依次比较第二个、直到第n个字母 排序顺序...

  • Java集合类总结

    Java集合类 1.简介: java集合类包含在java.util包下集合类存放的是对象的引用,而非对象本身。集合...

  • Java中对象的比较

    Java中要比较对象的大小或者要对对象的集合进行排序,需要通过比较这些对象的某些属性大小来确定它们之间的大小关系。...

网友评论

      本文标题:java对象集合排序集锦

      本文链接:https://www.haomeiwen.com/subject/wenlpqtx.html