
使用多重条件对数据进行排序: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的开发并推出了微信小程序工资查查。由于对有用户对数据隐私与安全性的考虑,北京亦卓科技在推出了云端应用–工资
0 查看详情
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 语句和自定义排序逻辑,可以灵活地对数据集合进行排序。希望本教程能够帮助你理解和应用多重条件排序技术。
以上就是使用多重条件对数据进行排序:Java 教程的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/772604.html
微信扫一扫
支付宝扫一扫