首页 > 解决方案 > 如何在java中制作排序列表?

问题描述

我在学校有一项任务,其中一项要求是对狗进行排序。除了这个要求,我已经在我的代码中完成了所有工作,因为我不知道该怎么做。下面你可以看到这部分作业的描述:

7 命令:“list dogs” 该命令包含在您在提交步骤四中提交的程序中,但要求有所改变。改变的是列表必须排序,所有者必须出现在打印输出中,并且如果没有注册的狗应该有错误消息。此命令列出注册表中的狗。用户必须得到一个关于最小尾巴长度的问题,并且程序必须打印出犬舍中所有尾巴长度相同或更长的狗的列表。如果您输入 0,那么所有的狗都会被打印出来。如果改为指定 10,则仅写入尾长大于或等于 10 的狗。打印时,必须打印所有狗的属性和尾巴长度。这包括此版本程序中的可能所有者。该列表应按尾长排序。如果两只狗的尾巴长度相同,则必须按名称排序。

示例:list dogs 命令> list dogs 要显示的最小尾巴长度> 1 以下狗有这么大的尾巴: * Fido(腊肠犬,1 年,2 公斤,3.70 厘米尾巴) * Karo(斗牛犬,8 年,7 公斤, 5.60 厘米尾巴,由 Henrik 拥有)* Milou(梗犬,7 岁,8 公斤,5.60 厘米尾巴)

如果没有登记的狗,就不应该有最小尾巴长度的问题。相反,应该打印一条错误消息。确保错误消息包含一些单词error或error,否则测试程序无法识别它是错误消息。示例:list dogs 命令> 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++;
    }
}

标签: javalistsortingsortedlist

解决方案


// 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());
}

推荐阅读