首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在java中创建排序列表?

如何在java中创建排序列表?
EN

Stack Overflow用户
提问于 2019-01-17 20:45:17
回答 2查看 487关注 0票数 2

我在学校有一项任务,其中一项要求是有一份有序的狗名单。我已经在我的代码中做了所有的事情,除了这个要求,因为我不确定怎么做。下面你可以看到这部分作业的描述:

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错误:登记中没有狗

这是我的“列出狗”的代码

代码语言:javascript
运行
复制
    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++;
    }
}
EN

回答 2

Stack Overflow用户

发布于 2019-01-17 20:53:52

代码语言:javascript
运行
复制
// 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());
}
票数 1
EN

Stack Overflow用户

发布于 2019-01-17 21:47:14

以下四个步骤可以帮助你,该方法使用Java 8 Stream API

  • 检查狗列表,如果为空,则打印错误消息
  • 排序狗列表
  • 过滤器狗列表以查找目标狗
  • 打印狗信息

假设Dog结构如下:

代码语言:javascript
运行
复制
class Dog {
    private String name;
    private Double tailLength;
    private String owner;
}

Java 8中的代码如下:

代码语言:javascript
运行
复制
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));
}

如果总是使用已排序的狗列表,则必须存储已排序的狗列表,这样就不需要每次都排序。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54236266

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档