Lambda + Arrays---小练习

题目

按照要求进行排序

定义数组并存储一些学生对象,利用 Arrays 中的 sort 方法进行排序

要求 1:属性有姓名、年龄、身高。

要求 2:按照年龄的大小进行排序,年龄一样,按照身高排序,身高一样按照姓名的字母进行排序。

思路

利用之前提到的Arrays.sort底层逻辑来实现排序:自定义对象数组的多级排序,按照年龄、身高、姓名依次排序,注意:在sort方法中,o1-o2是升序、o2-o1是降序,因为sort底层逻辑是插入排序+二分查找,拿未排序数组的元素和已排序数组的元素进行比较,若o1-o2是正数表示当前插入元素是大的,放在已排好序数组元素的后面,0表示插入元素和现在比是一样的,也放在后面,负数表示当前插入元素是小的,放在前面

代码

这里给大家写了两种方式:匿名内部类、Lambda

对象类:

java 复制代码
public class Student {
    private String name;
    private int age;
    private double height;

    public Student() {
    }

    public Student(String name, int age, double height) {
        this.name = name;
        this.age = age;
        this.height = height;
    }

    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 double getHeight() {
        return height;
    }

    public void setHeight(double height) {
        this.height = height;
    }

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

实现类:

java 复制代码
import java.util.Arrays;
import java.util.Comparator;

public class test1 {
    public static void main(String[] args) {
        
        //compareTo方法来比较字符串大小
        Student gf1=new Student("z",18,1.68);
        Student gf2=new Student("y",18,1.69);
        Student gf3=new Student("l",19,1.70);

        Student[] arr={gf1,gf2,gf3};

        Arrays.sort(arr, new Comparator<Student>() {
            @Override
            public int compare(Student o1, Student o2) {
                //按照年龄大小排序,年龄一样按身高排序,身高一样按照姓名的字母排序
                double temp=o1.getAge()- o2.getAge();
                temp=temp==0?o1.getHeight()-o2.getHeight():temp;
                temp=temp==0?o1.getName().compareTo(o2.getName()):temp;

               
                if(temp>0){
                    return 1;
                }else if(temp<0){
                    return -1;
                }else{
                    return 0;
                }
            }
        });

        //Lambda表达式
        Arrays.sort(arr, (Student o1, Student o2)->{
                //按照年龄大小排序,年龄一样按身高排序,身高一样按照姓名的字母排序
                double temp=o1.getAge()- o2.getAge();
                temp=temp==0?o1.getHeight()-o2.getHeight():temp;
                temp=temp==0?o1.getName().compareTo(o2.getName()):temp;

                if(temp>0){
                    return 1;
                }else if(temp<0){
                    return -1;
                }else{
                    return 0;
                }
            }
        );

        //Lambda极简表达式
        Arrays.sort(arr, ( o1, o2)->{
                    //按照年龄大小排序,年龄一样按身高排序,身高一样按照姓名的字母排序
                    double temp=o1.getAge()- o2.getAge();
                    temp=temp==0?o1.getHeight()-o2.getHeight():temp;
                    temp=temp==0?o1.getName().compareTo(o2.getName()):temp;

               
                    if(temp>0){
                        return 1;
                    }else if(temp<0){
                        return -1;
                    }else{
                        return 0;
                    }
                }
        );

        System.out.println(Arrays.toString(arr));
    }
}
相关推荐
软行4 分钟前
LeetCode 每日一题 3876. 构造奇偶一致的数组 II
c++·算法·leetcode
绿算技术30 分钟前
Solidigm联合绿算技术共同发布《面向 SOHO AI 推理的存储扩展方案》技术白皮书
人工智能·科技·算法·架构·spark
小刘在重生~1 小时前
Java 集合|Collection、List、ArrayList、LinkedList、泛型、Collections 工具类
java·数据结构·list
EDPJ1 小时前
(2026|IPI|我的论文投稿中,PSP 超轻量采样算法,轻量化架构探索/早融合+头压缩)LUMIN:面向工业异常检测的轻量级通用制造检测网络
算法·计算机视觉·架构·异常检测·采样算法
我不会起名字3221 小时前
一天一道算法题(29):单调栈
java·数据结构·python·算法·leetcode·golang·单调栈
苦瓜小生1 小时前
【前端】【力扣与手撕】十天带你刷完前端算法与手撕,全是最简单好记的最优解法!day4
前端·数据结构·算法·leetcode·面试
不会就选b2 小时前
算法日常・每日刷题--<贪心>5
算法
刘广睿2 小时前
素材去重为什么难?文件指纹、感知哈希与相似度判定的设计笔记
算法·哈希算法·产品设计·素材管理
少司府3 小时前
C++进阶:智能指针
开发语言·数据结构·c++·b树·算法·c·智能指针
鹿角片ljp3 小时前
LeetCode 22:括号生成|回溯dfs、剪枝与 char[] 覆盖代替撤销
算法·深度优先