【问题标题】:Sorting a List - How to?排序列表 - 如何?
【发布时间】:2018-04-11 12:39:54
【问题描述】:

我有三个对象类,分别称为Size1Size2Size3

所有 Size 类都有不同的值(所有值都是字符串):

  • Size1.getValue() = "1"
  • Size2.getValue() = "2"
  • Size3.getValue() = "1"

我想对 List 进行排序,使其不包含重复值。

这是我尝试过的:

private List<Size> getSortedSizes(List<Size> allSizes){

  List<Size> sortedArray = new ArrayList<>();

  for (int i = 0; i < allSizes.size(); i++){
    Size size = allSizes.get(i);
    if (sortedArray.size() == 0){
      sortedArray.add(Size);
    } else {
      for (int a = 0; a < sortedArray.size(); a++) {
        if (!sortedArray.get(a).getValue().equals(Size.getValue())) {
          sortedArray.add(Size);
        }
      }
    }
  }
  return sortedArray;
}

【问题讨论】:

  • 您要对列表进行排序还是从列表中删除所有重复项?这两种操作有很大区别。
  • 删除所有重复项
  • 请提供一个完整的例子,我们可以自己编译运行。展示如何创建 List 并调用此方法。
  • 那我推荐使用 Set。因为这就是 Sets 的用途(不包含重复项)。但请注意,您需要您的 Size 类实现 equals() 和 hashcode() 方法才能正确使用 Set。

标签: java android list sorting arraylist


【解决方案1】:

添加到 TreeSet,而不是 Arraylist

TreeSets 是有序的,不能包含重复项

【讨论】:

    【解决方案2】:

    您可以通过以下方式实现您的方法:

    private Set<Size> getSortedSizes(List<Size> allSizes) {
        Set<Size> sorted = new TreeSet<>(sortedArray);
        return sorted;
    }
    

    但你必须在你的 Size 类中实现两个方法,它们是:Comparable中的 hashCode()int compareTo(Object o) em> 界面

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-09
      相关资源
      最近更新 更多