0

0

使用多重条件对数据进行排序:Java 教程

DDD

DDD

发布时间:2025-09-14 22:15:01

|

654人浏览过

|

来源于php中文网

原创

使用多重条件对数据进行排序:java 教程

使用多重条件对数据进行排序:Java 教程

本教程旨在指导开发者如何使用 Java 实现基于用户输入的多重条件数据排序。通过使用 Scanner 类获取用户输入的排序条件,并结合 switch 语句和自定义排序逻辑,可以灵活地对数据集合进行排序。教程将提供代码示例和注意事项,帮助读者理解和应用多重条件排序技术。

在许多应用程序中,需要根据用户的选择对数据进行排序。用户可能希望按照多个条件进行排序,例如先按姓名排序,再按身高排序。本教程将介绍如何使用 Java 实现这种多重条件排序。

1. 获取用户输入

首先,我们需要获取用户输入的排序条件。可以使用 Scanner 类从控制台读取用户输入。为了处理多个排序条件,可以将用户输入分割成一个字符串数组

立即学习Java免费学习笔记(深入)”;

import java.util.ArrayList;
import java.util.Scanner;

public class SortByTwoCriteria {

    static Scanner sc = new Scanner(System.in);

    public static void sortByTwoCriteria(ArrayList data) {
        System.out.println("""
                1. Sort by name.
                2. Sort by height.
                3. Sort by power(s).
                4. Sort by weakness(ess).
                5. Sort by origin FROM earth.
                6. Sort by origin NOT from earth.
                """);

        String userInput = sc.nextLine().toLowerCase();

        String[] userInputs = userInput.split(" ");

        if (userInputs.length == 0) {
            System.out.println("Please enter at least one parameter to sort by.");
            return;
        }

        // Apply the first sorting criteria
        switch (userInputs[0]) {
            case "1":
                // Sort by name.  Assume Superhero class has a getName() method
                data.sort((s1, s2) -> s1.getName().compareTo(s2.getName()));
                break;
            case "2":
                // Sort by height. Assume Superhero class has a getHeight() method
                data.sort((s1, s2) -> Integer.compare(s1.getHeight(), s2.getHeight()));
                break;
            case "3":
                // Sort by power. Assume Superhero class has a getPower() method
                data.sort((s1, s2) -> s1.getPower().compareTo(s2.getPower()));
                break;
            case "4":
                // Sort by weakness. Assume Superhero class has a getWeakness() method
                data.sort((s1, s2) -> s1.getWeakness().compareTo(s2.getWeakness()));
                break;
            case "5":
                // Sort by origin FROM earth. Assume Superhero class has a isFromEarth() method
                data.sort((s1, s2) -> Boolean.compare(s2.isFromEarth(), s1.isFromEarth())); // True first
                break;
            case "6":
                // Sort by origin NOT from earth. Assume Superhero class has a isFromEarth() method
                data.sort((s1, s2) -> Boolean.compare(s1.isFromEarth(), s2.isFromEarth())); // False first
                break;
            default:
                System.out.println("Invalid first sorting criteria.");
                return;
        }

        // Apply the second sorting criteria, if provided
        if (userInputs.length > 1) {
            switch (userInputs[1]) {
                case "1":
                    data.sort((s1, s2) -> {
                        int firstCompare = s1.getName().compareTo(s2.getName());
                        return firstCompare != 0 ? firstCompare : 0; // Preserve first order if names are the same.
                    });
                    break;
                case "2":
                    data.sort((s1, s2) -> {
                        int firstCompare = Integer.compare(s1.getHeight(), s2.getHeight());
                        return firstCompare != 0 ? firstCompare : 0;
                    });
                    break;
                 case "3":
                    data.sort((s1, s2) -> {
                        int firstCompare = s1.getPower().compareTo(s2.getPower());
                        return firstCompare != 0 ? firstCompare : 0;
                    });
                    break;
                case "4":
                   data.sort((s1, s2) -> {
                        int firstCompare = s1.getWeakness().compareTo(s2.getWeakness());
                        return firstCompare != 0 ? firstCompare : 0;
                    });
                    break;
                case "5":
                    data.sort((s1, s2) -> {
                        int firstCompare = Boolean.compare(s2.isFromEarth(), s1.isFromEarth());
                        return firstCompare != 0 ? firstCompare : 0;
                    });
                    break;
                case "6":
                   data.sort((s1, s2) -> {
                        int firstCompare = Boolean.compare(s1.isFromEarth(), s2.isFromEarth());
                        return firstCompare != 0 ? firstCompare : 0;
                    });
                    break;
                default:
                    System.out.println("Invalid second sorting criteria.");
            }
        }

        // Print the sorted data (for demonstration)
        for (Superhero superhero : data) {
            System.out.println(superhero); // Assuming Superhero has a meaningful toString() method
        }
    }
}

class Superhero {
    private String name;
    private int height;
    private String power;
    private String weakness;
    private boolean fromEarth;

    // Constructor
    public Superhero(String name, int height, String power, String weakness, boolean fromEarth) {
        this.name = name;
        this.height = height;
        this.power = power;
        this.weakness = weakness;
        this.fromEarth = fromEarth;
    }

    // Getters and setters (omitted for brevity)

    public String getName() {
        return name;
    }

    public int getHeight() {
        return height;
    }

     public String getPower() {
        return power;
    }

    public String getWeakness() {
        return weakness;
    }

    public boolean isFromEarth() {
        return fromEarth;
    }

    @Override
    public String toString() {
        return "Superhero{" +
                "name='" + name + '\'' +
                ", height=" + height +
                ", power='" + power + '\'' +
                ", weakness='" + weakness + '\'' +
                ", fromEarth=" + fromEarth +
                '}';
    }
}

2. 使用 switch 语句处理排序条件

使用 switch 语句根据用户输入的排序条件执行相应的排序操作。每个 case 对应一个排序条件,并在其中实现相应的排序逻辑。在 Java 8 及更高版本中,可以使用 Comparator 接口和 Lambda 表达式简化排序代码。

工资查查移动工资条
工资查查移动工资条

大部分的工资还是以打印工资条的形式进行,偶有公司使用邮件发放工资条,而工资条的现代形式应该是移动工资条,以实现信息的备忘、到达、管理、对帐、环保、高效等需求……,用户已经习惯使用手机(或以其它移动方式)实现一切需求,应用的移动化是大势所趋。工资查查就在这样的背景下诞生,北京亦卓科技于2017的开发并推出了微信小程序工资查查。由于对有用户对数据隐私与安全性的考虑,北京亦卓科技在推出了云端应用--工资

下载
import java.util.Comparator;

// Example usage within the main method or another class:
public static void main(String[] args) {
    ArrayList superheroes = new ArrayList<>();
    superheroes.add(new Superhero("Superman", 190, "Flight", "Kryptonite", true));
    superheroes.add(new Superhero("Batman", 180, "Intelligence", "No powers", false));
    superheroes.add(new Superhero("Wonder Woman", 183, "Strength", "Piercing weapons", true));

    SortByTwoCriteria.sortByTwoCriteria(superheroes); // Example: User inputs "1 2" to sort by name then height
}

3. 实现多重排序

为了实现多重排序,可以在第一个排序条件的基础上,对具有相同值的元素应用第二个排序条件。 可以使用 Comparator.thenComparing() 方法实现。但是,在该例子中,我们通过判断第一次比较的结果是否为0来决定是否进行第二次排序,如果第一次排序的结果不为0,则直接返回第一次排序的结果,否则才进行第二次排序。

注意事项

  • 确保用户输入的排序条件是有效的。可以添加输入验证逻辑,例如检查输入是否为数字,以及数字是否在有效范围内。
  • 根据实际情况选择合适的排序算法。对于大型数据集,可以考虑使用更高效的排序算法,例如归并排序或快速排序。
  • Superhero 类需要有对应的 getter 方法,例如 getName()、getHeight() 等,以便在排序时访问对象的属性。

总结

本教程介绍了如何使用 Java 实现基于用户输入的多重条件数据排序。通过使用 Scanner 类获取用户输入,并结合 switch 语句和自定义排序逻辑,可以灵活地对数据集合进行排序。希望本教程能够帮助你理解和应用多重条件排序技术。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
switch语句用法
switch语句用法

switch语句用法:1、Switch语句只能用于整数类型,枚举类型和String类型,不能用于浮点数类型和布尔类型;2、每个case语句后面必须跟着一个break语句,以防止执行其他case的代码块,没有break语句,将会继续执行下一个case的代码块;3、可以在一个case语句中匹配多个值,使用逗号分隔;4、Switch语句中的default代码块是可选的等等。

539

2023.09.21

Java switch的用法
Java switch的用法

Java中的switch语句用于根据不同的条件执行不同的代码块。想了解更多switch的相关内容,可以阅读本专题下面的文章。

423

2024.03.13

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

298

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

212

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1502

2023.10.24

字符串介绍
字符串介绍

字符串是一种数据类型,它可以是任何文本,包括字母、数字、符号等。字符串可以由不同的字符组成,例如空格、标点符号、数字等。在编程中,字符串通常用引号括起来,如单引号、双引号或反引号。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

624

2023.11.24

java读取文件转成字符串的方法
java读取文件转成字符串的方法

Java8引入了新的文件I/O API,使用java.nio.file.Files类读取文件内容更加方便。对于较旧版本的Java,可以使用java.io.FileReader和java.io.BufferedReader来读取文件。在这些方法中,你需要将文件路径替换为你的实际文件路径,并且可能需要处理可能的IOException异常。想了解更多java的相关内容,可以阅读本专题下面的文章。

633

2024.03.22

php中定义字符串的方式
php中定义字符串的方式

php中定义字符串的方式:单引号;双引号;heredoc语法等等。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

589

2024.04.29

java入门学习合集
java入门学习合集

本专题整合了java入门学习指南、初学者项目实战、入门到精通等等内容,阅读专题下面的文章了解更多详细学习方法。

1

2026.01.29

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Kotlin 教程
Kotlin 教程

共23课时 | 3万人学习

C# 教程
C# 教程

共94课时 | 7.9万人学习

Java 教程
Java 教程

共578课时 | 53.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号