排序

对List进行排序,有两种办法

第一个是用java提供的工具类Collections提供的sort方法进行排序

废话不多说,上代码

首先定义一个Student

public class Student {
private int age;
private String name; public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Student(int age, String name) {
super();
this.age = age;
this.name = name;
} }

下面是进行排序的代码

    public static void main(String[] args) {

        List<Student> list= new ArrayList<Student>();
list.add(new Student(5, "aa"));
list.add(new Student(7, "bb"));
list.add(new Student(6, "cc")); Collections.sort(list,new Comparator<Student>(){
@Override
public int compare(Student o1, Student o2) {
          
          //会把集合里面的对象两两传进方法里面比较,这里比较age,降序就O2-O1,升序就O1-O2
return o2.getAge()-o1.getAge();
}
});
//打印list每一项的age
list.forEach(a -> System.out.println(a.getAge()));
}
}

第二种方法:

List集合提供了sort方法,依然用Student做集合,进行排序

    public static void main(String[] args) {

        List<Student> list= new ArrayList<Student>();
list.add(new Student(5, "aa"));
list.add(new Student(7, "bb"));
list.add(new Student(6, "cc"));
    //差别在这里,这里直接用list的sort方法,不需要吧list作为参数,其他的和Comparable排序是一样的
list.sort(new Comparator<Student>(){
@Override
public int compare(Studento1, Studento2) {
          
          //会把集合里面的对象两两传进方法里面比较,这里比较age,降序就O2-O1,升序就O1-O2
return o2.getAge()-o1.getAge();
}
});
//打印list每一项的age
list.forEach(a -> System.out.println(a.getAge()));
}
}

对list进行分组:

同样的,用Student的集合作为示例,代码如下

public class test2 {
/**
* 创建比较器
*/
public static <T> List<List<T>> dividerList(List<T> list,Comparator<? super T> comparator) {
List<List<T>> lists = new ArrayList<>(); for (int i = 0; i < list.size(); i++) {
boolean isContain = false;
for (int j = 0; j < lists.size(); j++) {
if (lists.get(j).size() == 0||comparator.compare(lists.get(j).get(0),list.get(i)) == 0) {
lists.get(j).add(list.get(i));
isContain = true;
break;
}
}
if (!isContain) {
List<T> newList = new ArrayList<>();
newList.add(list.get(i));
lists.add(newList);
}
}
return lists;
} public static void main(String[] args) {
List<Student> list = new ArrayList<Student>();
    //实在不会起名字,用字母代替吧
list.add(new Student(17,"aa"));
list.add(new Student(15,"bb"));
list.add(new Student(16,"cc"));
list.add(new Student(15,"dd"));
list.add(new Student(16,"ee"));
list.add(new Student(17,"ff"));
List<List<Student>> list2 = dividerList(list, new Comparator<Student>() { @Override
public int compare(Student o1, Student o2) {
// 按年龄分组,这里注意一点,返回的值为0,就会认为这两个Studeng是一组的,返回其他值,则认为不是,所以下面的-1可以替换为任意非0数字 return o1.getAge == o2.getAge ? 0:-1;
//也可以按照姓名分组,返回结果如下,因为是比较两个值是否相等,所以先后是没有区别的
//return o1.getName().compareTo(o1.getName())
}
});
for(List<Student> stList: list2){
      stList.forEach(a -> System.out.printIn(a.getName+":"+a.getAge));
      System.out.printIn("=========================================");
    } }
}

java中对List进行分组和排序的更多相关文章

  1. Java中的经典算法之选择排序(SelectionSort)

    Java中的经典算法之选择排序(SelectionSort) 神话丿小王子的博客主页 a) 原理:每一趟从待排序的记录中选出最小的元素,顺序放在已排好序的序列最后,直到全部记录排序完毕.也就是:每一趟 ...

  2. JAVA中运用数组的四种排序方法

    JAVA中在运用数组进行排序功能时,一般有四种方法:快速排序法.冒泡法.选择排序法.插入排序法. 快速排序法主要是运用了Arrays中的一个方法Arrays.sort()实现. 冒泡法是运用遍历数组进 ...

  3. AJPFX关于Java中运用数组的四种排序方法

    JAVA中在运用数组进行排序功能时,一般有四种方法:快速排序法.冒泡法.选择排序法.插入排序法.快速排序法主要是运用了Arrays中的一个方法Arrays.sort()实现.冒泡法是运用遍历数组进行比 ...

  4. Java基础知识强化12:Java中运用数组的四种排序方法

    1.使用JavaApi文档中的Arrays类中的sort()进行快速排序 首先我们直接看代码如下: package himi.text; import java.util.Arrays; public ...

  5. java中Collections.sort()方法实现集合排序

    1.Integer/String泛型的List进行排序 List <Integer> integerlist = new ArrayList<Integer>();   //定 ...

  6. 十七、Java中数组常见的几种排序方法!

    转载自:https://www.cnblogs.com/bekeyuan123/p/6891875.html 数组的定义: // 3种定义方式 int[] arr = new int[5]; int[ ...

  7. JAVA中,数组的操作与排序

    自己写了正向反向的冒泡排序,还用了静态和NEW方法实现. import java.util.Arrays; public class HelloJava { public static void ma ...

  8. java中实现Comparable接口实现自定义排序

    class Student implements Comparable{ String name; int gpa; @Override public int compareTo(Object arg ...

  9. Java中Lambda表达式的使用

    简介(译者注:虽然看着很先进,其实Lambda表达式的本质只是一个"语法糖",由编译器推断并帮你转换包装为常规的代码,因此你可以使用更少的代码来实现同样的功能.本人建议不要乱用,因 ...

随机推荐

  1. Maven简介(六)——Dependency

    7      Dependency介绍 http://elim.iteye.com/category/269897 7.1     依赖的传递性 当项目A依赖于B,而B又依赖于C的时候,自然的A会依赖 ...

  2. Android Weekly Notes Issue #261

    Android Weekly Issue #261 June 11th, 2017 Android Weekly Issue #261 本期内容包括: Adaptive Icons; Kotlin实现 ...

  3. smokeping 报警配置

    摘自: http://blog.csdn.net/achejq/article/details/51556494 smokeping 默认用sendmail 发邮件告警,也可以直接调用外部程序进行报警 ...

  4. Queue Explorer过期处理

    Queue Explorer是收费软件,用一段时间后会显示过期界面无法使用, 我们可以删除注册表 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Cogin\Queue ...

  5. int型变量,不使用中间变量完成互换

    package com.t_02; /** * 定义两个int类型的数,完成交换,不使用第三方变量 * @author Administrator * */ public class t1 { pub ...

  6. Speaking 1

    What clothes do you usually like to wear?Well I like fashionable clothes, but I also want to be comf ...

  7. sed 中带变量的情况

    #teststr="IBM" #sed -n '/' "$teststr" '/=' testfile.txt 在sed中使用变量 通常,我们使用sed进行变量 ...

  8. bzoj2309 CTSC2011 字符串重排

    题意: 给定n个字符串S1,S2,S3,...,Sn,把它们排序 设排序结果为Sp1,Sp2,Sp3,...,Spn 现在给定q个任务,每个任务的格式都是"要求在排序结果中Sa恰好在Sb前一 ...

  9. k8s-创建node节点kubeconfig配置文件

    Kubeconfig 需要配置如下 TLS Bootstrapping Token kubelet kubeconfig kube-proxy kubeconfig 下载kubectl kubectl ...

  10. 2084. Asm.Def的基本算法

    2084. Asm.Def的基本算法 传送门 ★☆   输入文件:asm_algo.in   输出文件:asm_algo.out   简单对比时间限制:1 s   内存限制:256 MB [题目描述] ...