【问题标题】:Android sort arraylist by propertiesAndroid按属性排序arraylist
【发布时间】:2012-06-06 20:49:13
【问题描述】:

我想按属性对ArrayList 进行排序。这是我的代码...

public class FishDB{

    public static Object Fish;
    public ArrayList<Fish> list = new ArrayList<Fish>();

    public class Fish{
        String name;
        int length;
        String LatinName;
        //etc. 

        public Vis (String name) {
            this.name = name;
        }
    }

    public FishDB() {
        Fish fish;

        fish = new Fish("Shark");
        fish.length = 200;
        fish.LatinName = "Carcharodon Carcharias";

        fish = new Fish("Rainbow Trout");
        fish.length = 80;
        fish.LatinName = "Oncorhynchus Mykiss";

        //etc.
        }
    }
}

现在我想按一个属性对这个ArrayList 进行排序,例如另一个活动中的latinname。但我不知道该怎么做。有人知道怎么做吗?

【问题讨论】:

  • 试试Collections.sort(arrayList);
  • @Lucifer 如果你这样做,那么你的 arrayList 的泛型类型应该实现 java.lang.Comparable

标签: java android sorting arraylist


【解决方案1】:

有多种选择如何实现相同的目标。 最简单的解决方案是利用 Java 8 功能:

Collections.sort(Fish, (t1, t2) -> t1.name().compareTo(t2.name()));

【讨论】:

    【解决方案2】:

    Kotlin 代码

    list.sortWith(Comparator { o1, o2 -> o1.name!!.compareTo(o2.name!!) })
    

    【讨论】:

      【解决方案3】:

      您可以通过以下代码轻松完成:

      Collections.sort(list, new Comparator<Fish>() {
          public int compare(Fish o1, Fish o2) {
              return o1.name.compareTo(o2.name);
          }
      });
      

      【讨论】:

      • 这个好多了!
      【解决方案4】:

      你需要实现一个Comparator,例如:

      public class FishNameComparator implements Comparator<Fish>
      {
          public int compare(Fish left, Fish right) {
              return left.name.compareTo(right.name);
          }
      }
      

      然后像这样排序:

      Collections.sort(fishes, new FishNameComparator());
      

      【讨论】:

      • 谢谢,但我还有一个问题。我想对活动中的数组列表进行排序。开头是: public class fishList extends ListActivity{ 当我写 public class FishNameComparator implements Comparator{ 它给出了两个错误:本地类 FishNameComparator 的非法修饰符;只允许抽象或最终。并且:FishNameComparator 类型必须实现继承的抽象方法 Comparator.compare(String, String)。我只是按照你的回答做了。
      • @user1380611:如果您将其实现为嵌套类,那么它必须是static class。我搞砸了我的例子,应该是implements Comparator&lt;Fish&gt;
      • 非常适合我。此处按升序排序。
      猜你喜欢
      • 2013-06-14
      • 1970-01-01
      • 2015-04-05
      • 1970-01-01
      • 1970-01-01
      • 2014-10-31
      • 2011-03-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多