【问题标题】:how to make list of duplicates in custom arraylist Java如何在自定义arraylist Java中制作重复列表
【发布时间】:2020-01-08 12:16:53
【问题描述】:

我有一张狗的名单,上面有它们的名字、品种、年龄、体重和尾巴长度。我已经按尾长对列表进行了排序,现在应该按名称对尾长相同的狗进行排序。 例如,列表应该是这样的:

Charlie  Golden   2years 3kg 2.0cm

Bob      Bulldog  3years 4kg 3.3cm

Lucy     Golden   4years 3kg 3.3cm 

Molly    Bulldog  5years 7kg 5.2cm

我有一个名为 sortTail() 的方法,它按尾长排序,还有一个方法 sortName(),它按名称排序。

sortTail()

ArrayList<Dog> dogs = new ArrayList<>();

sortName()

在这之间我应该怎么做才能只对具有相同尾长的那些进行排序?

【问题讨论】:

    标签: java sorting arraylist


    【解决方案1】:

    如果您的Dog 实例位于List 中,那么最好的排序方法是使用Java 的Comparator 类和List#sort。您可以使用Comparator 的默认方法在多个标准上创建比较器。例如,下面的代码将按照尾巴长度对狗进行排序,然后按照名称对尾巴长度相同的狗进行排序:

    List<Dog> dogs = // ...
    dogs.sort(
        Comparator.comparing(Dog::getTailLength)
                  .thenComparing(Dog::getName));
    

    【讨论】:

    • 接受的答案也使用 Comparator 和 .sort 似乎很奇怪。
    • 那么我可以先用我的方法对尾部进行排序,然后使用比较器,从而达到练习的要求
    【解决方案2】:

    以防万一您想实现自己的比较器或您的任务需要它。 但是,SDJ 的回答应该比发明自行车更受欢迎:

    Comparator<Dog> dogComparator = 
        (a,b) -> {
            if (a.getTailLength() == b.getTailLength()) 
                return a.getName().compareTo(b.getName());
            else 
                return 0;
        }
    
    
    Collections.sort(dogs, dogComparator);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-23
      • 2018-08-02
      • 1970-01-01
      • 1970-01-01
      • 2017-03-19
      • 2017-10-13
      • 2019-02-28
      • 2013-07-14
      相关资源
      最近更新 更多