
本教程旨在指导开发者如何使用 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<Superhero> 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 表达式简化排序代码。
import java.util.Comparator;
// Example usage within the main method or another class:
public static void main(String[] args) {
ArrayList<Superhero> 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,则直接返回第一次排序的结果,否则才进行第二次排序。
注意事项
总结
本教程介绍了如何使用 Java 实现基于用户输入的多重条件数据排序。通过使用 Scanner 类获取用户输入,并结合 switch 语句和自定义排序逻辑,可以灵活地对数据集合进行排序。希望本教程能够帮助你理解和应用多重条件排序技术。
以上就是使用多重条件对数据进行排序:Java 教程的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号