我在学校有一项作业,其中一项要求是对狗进行排序。除了这个要求,我已经在我的代码中完成了所有的事情,因为我不知道该怎么做。在下面,您可以看到这部分作业的描述:
7 命令:“列出狗” 该命令已包含在您在提交步骤四中提交的程序中,但要求有所改变。改变的是必须对列表进行排序,所有者必须在打印输出时在场,并且如果没有注册的狗应该有错误消息。 此命令列出注册表中的狗。用户必须得到一个关于最小尾部长度的问题,并且程序必须打印出狗舍中尾部长度等于或长于该最小值的所有狗的列表。如果输入 0,则将打印所有狗。如果改为指定 10,则仅写入尾部长度大于或等于 10 的狗。 打印时,必须打印狗的所有属性和尾部长度。这包括此版本程序中的可能所有者。该列表应按尾长排序。如果两条狗的尾部长度相同,则必须按名称对它们进行排序。
示例:列出狗 命令>列出狗 显示的最小尾长> 1 以下狗有这么大的尾部: * Fido(腊肠犬,1 岁,2 公斤,尾部 3.70 厘米) * Karo(斗牛犬,8 岁,7 公斤,尾部 5.60 厘米,归 Henrik 所有) * Milou(梗犬,7 岁,8 公斤,尾部 5.60 厘米)
如果没有登记的狗,应该没有最小尾部长度的问题。相反,应该打印一条错误消息。确保错误消息包含一些单词 error 或 error,否则测试程序无法识别它是一条错误消息。 示例:列出狗 命令>列出狗 错误:登记中没有狗
这是我的“list dogs”代码
private void listDogs() {
System.out.print("Smallest tail length to display: ");
kennelList.sort(Comparator.comparing(dog -> dog.getName()));
double tailLength = input.nextDouble();
input.nextLine();
int y = 0;
while (y < kennelList.size()) {
Dog dTail = kennelList.get(y);
if (dTail.getTailLength() >= tailLength) {
System.out.println(dTail);
}
y++;
}
}
最佳答案
// define comparators
final Comparator<Dog> SORT_BY_NAME_ASC = Comparator.comparing(Dog::getName);
final Comparator<Dog> SORT_BY_TAIL_LENGTH_ASC = Comparator.comparing(Dog::getTailLength);
// define a list
List<Dog> kennelList = Collections.emptyList();
// sort list items (you can swap comparators)
kennelList.sort(SORT_BY_NAME_ASC.thenComparing(SORT_BY_TAIL_LENGTH_ASC));
// retrieve items with at least required tailLength
public static List<Dog> filterByTailLength(List<Dog> kennelList, double tailLength) {
return kennelList.stream()
.filter(dog -> Double.compare(dog.getTailLength(), tailLength) >= 0)
.collect(Collectors.toList());
}
关于java - 如何在java中制作一个排序列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54236266/