我在学校有一项任务,其中一项要求是有一份有序的狗名单。我已经在我的代码中做了所有的事情,除了这个要求,因为我不确定怎么做。下面你可以看到这部分作业的描述:
7命令:“列出狗”此命令包含在您在提交步骤4中提交的程序中,但在某种程度上更改了要求。更改的是,必须对列表进行排序,打印输出时必须有狗的主人,如果没有注册的狗,应该会有一条错误消息。此命令列出注册表中的狗。用户必须得到关于最小尾长的问题,并且程序必须打印狗舍中尾巴长度等于或大于最小尾长的所有狗的列表。如果输入0,则将打印所有狗。如果改为指定10,则仅写入尾长大于或等于10的狗。打印时,必须打印狗的所有属性和尾巴长度。这包括此版本程序的可能所有者。该列表应按尾部长度排序。如果两条狗的尾巴长度相同,则必须按名称排序。
例如: list dogs Command> list狗的最小尾长为display> 1,以下狗有这么大的尾巴:* Fido (达克斯猎犬,1岁,2公斤,3.70厘米尾巴)*卡罗(斗牛犬,8岁,7公斤,5.60厘米尾巴,属于亨里克)*米卢(梗,7岁,8公斤,5.60厘米尾巴)
如果没有登记的狗只,应该没有最小尾巴长度的问题。相反,应该打印一条错误消息。确保错误消息包含error或error字样,否则测试程序无法识别它是错误消息。示例: list dogs Command> 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++;
}
}
发布于 2019-01-17 20:53:52
// 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());
}
发布于 2019-01-17 21:47:14
以下四个步骤可以帮助你,该方法使用Java 8 Stream API
假设Dog结构如下:
class Dog {
private String name;
private Double tailLength;
private String owner;
}
Java 8中的代码如下:
public static void listDogs(List<Dog> dogs, int tailLengh) {
if (null == dogs || dogs.size() < 1) {
System.out.println("no register dogs");
} else dogs.stream()
.sorted((o1, o2) -> o1.getTailLength().compareTo(o2.getTailLength()) == 0 ? o1.getName().compareTo(o2.getName()) : o1.getTailLength().compareTo(o2.getTailLength()))
.filter(dog -> dog.getTailLength() >= tailLengh)
.forEach(dog -> System.out.println(dog));
}
如果总是使用已排序的狗列表,则必须存储已排序的狗列表,这样就不需要每次都排序。
https://stackoverflow.com/questions/54236266
复制相似问题