3、Lambda表达式简化Comparator接口

本文介绍了如何使用Comparator接口和Lambda表达式对Student对象的集合进行年龄升序排序。首先展示了Comparator接口作为函数式接口的特性,然后通过匿名内部类和Lambda表达式两种方式实现了排序功能,最终得到了相同的结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、首先看一下Comparator接口的源码,完全符合函数式接口的要求。

函数式接口的要求:
1、首先必须是接口
2、接口中只能有一个抽象方法
在这里插入图片描述

二、代码:将Student集合按照年龄升序排序

Student.java

package com.zjl.study.Lambda表达式;


/**
 * Created by zjl 2022/6/4
 **/

public class Student {

  private String name;
  private int age;
  private char sex;

  public Student() {
  }

  public Student(String name, int age, char sex) {
    this.name = name;
    this.age = age;
    this.sex = sex;
  }

  public String getName() {
    return name;
  }

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

  public int getAge() {
    return age;
  }

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

  public char getSex() {
    return sex;
  }

  public void setSex(char sex) {
    this.sex = sex;
  }

  @Override
  public String toString() {
    return "Student{" +
        "name='" + name + '\'' +
        ", age=" + age +
        ", sex=" + sex +
        '}' + "\n";
  }
}

1、匿名内部类排序写法

package com.zjl.study.Lambda表达式;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;

/**
 * Created by zjl 2022/6/4
 *
 * 目标:按照年龄升序排序
 **/
public class Lambda表达式简化Comparator {

  public static void main(String[] args) {
    ArrayList<Student> students = new ArrayList<>();
    students.add(new Student("张三", 15, '男'));
    students.add(new Student("李四", 5, '男'));
    students.add(new Student("王五", 35, '男'));


    // 1、匿名内部类写法
    Collections.sort(students, new Comparator<Student>() {
      @Override
      public int compare(Student s1, Student s2) {
        return s1.getAge() - s2.getAge();
      }
    });

    System.out.println(students);
  }
}

2、Lambda表达式简化匿名内部类排序写法

package com.zjl.study.Lambda表达式;

import java.util.ArrayList;
import java.util.Collections;

/**
 * Created by zjl 2022/6/4
 *
 * 目标:按照年龄升序排序
 **/
public class Lambda表达式简化Comparator {

  public static void main(String[] args) {
    ArrayList<Student> students = new ArrayList<>();
    students.add(new Student("张三", 15, '男'));
    students.add(new Student("李四", 5, '男'));
    students.add(new Student("王五", 35, '男'));


    Collections.sort(students,(Student s1, Student s2) -> {
      return s1.getAge() - s2.getAge();
    });
    System.out.println(students);
  }
}

三、以上两种排序写法都能够实现排序,结果如下:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值