【问题标题】:android Arrange data in descending orderandroid 按降序排列数据
【发布时间】:2015-07-28 13:43:43
【问题描述】:

我有以下字符串数据(逗号格式)(姓名,标记)

A,20,B,10,C,30

我想转换为降序,如:

C,30,A,29,B,10

请帮助我如何在 android 中实现?

这是我准备的代码......

公共类 custom_sort {

    public String name;
    public int mark;

    public custom_sort(String a, int b) {
        // TODO Auto-generated constructor stub

        name = a;
        mark = b;
    }

    void setname(String s)
    {
        name=s;
    }

    void setmark(int s)
    {
        mark = s;
    }

    String getname()
    {
        return(name);
    }

    int getmark()
    {
        return(mark);
    }


}

提前致谢,

【问题讨论】:

  • 什么都试过了。使用Map,名称为键,标记为值。接下来对这张地图进行排序。您还需要字符串拆分操作。
  • 保存数据的是什么?你试过什么?
  • 数据在字符串数组中,很难做到...有人建议我使用收集框架...但是卡在列表中所以不知道如何解决
  • 请帮助我,我已经用我尝试过的代码修改了 que...

标签: java android sorting


【解决方案1】:

有很多方法可以做到这一点。我看到你已经做了一个类:custom_sort。如果我们只是让它具有可比性,我们可以使用它对其进行排序。我们通过实现 Comparable 接口来做到这一点。

public class custom_sort implements Comparable{

那么你需要做的就是实现一个所需的方法:

@Override
    public int compareTo(custom_sort cs) {
       /*
       This method should return 0 if the two objects are equal,
       1 if this is biggest 
       and -1 if cs is biggest */
    }

然后您可以将所有 custom_sorts 放入一个 List 中,然后执行 Arrays.sort(yourArray)。

你也可以看看这个帖子Android sort array

【讨论】:

    【解决方案2】:

    使用ArrayList 而不是字符串数组。

    这可能不是最好的解决方案,但它确实有效。

    初始化ArrayList

    ArrayList<String> names = new ArrayList<>();
    ArrayList<Integer> scores = new ArrayList<>();
    

    ArrayList内填写数据

    names.add("A");
    scores.add(20);
    ....
    

    现在对它们进行排序

    private void sortScoreAndName() {
        for (int i = 0; i < scores.size(); i++) {
            for (int j = 0; j < i; j++) {
                if (scores.get(i) > scores.get(j))
                    swap(i, j);
            }
        }
    }
    
    private void swap(int i, int j) {
        int tempSco = scores.get(i);
        String tempName = names.get(i);
        scores.remove(i);
        names.remove(i);
        scores.add(i, scores.get(j));
        names.add(i, names.get(j));
        scores.remove(j);
        names.remove(j);
        scores.add(j, tempSco);
        names.add(j, tempName);
    }
    

    现在你的 ArrayList 是降序排列的。可以使用获取对应的数据。

    names.get(poition);
    scores.get(position);
    

    【讨论】:

      【解决方案3】:

      试试这个:

      import android.support.v4.util.Pair;
      import java.util.ArrayList;
      import java.util.Collections;
      import java.util.Comparator;
      import java.util.List;
      
      String[] values = {"A", "20", "B", "10", "C", "30"};
      List<Pair> pairs = new ArrayList<>();
      for (int i = 0; i < values.length; i += 2) {
          pairs.add(new Pair<>(values[i], Integer.parseInt(values[i + 1])));
      }
      Collections.sort(pairs, new Comparator<Pair>() {
          @Override
          public int compare(Pair lhs, Pair rhs) {
              return ((Integer) rhs.second).compareTo((Integer) lhs.second);
          }
      });
      

      现在列表对已按您的意愿排序。查看我使用的 Pair 类http://developer.android.com/reference/android/util/Pair.html

      如果你想把它转换回来,下面的代码会帮助你:

      String[] newValues = new String[values.length];
      int i = 0;
      for (Pair pair : pairs) {
          newValues[i] = (String) pair.first;
          newValues[i + 1] = Integer.toString((Integer) pair.second);
          i += 2;
      }
      

      【讨论】:

      • 非常感谢您的回复,我在 import android.support.v4.util.Pair 时遇到错误;
      • 使用导入android.util.Pair;而是
      猜你喜欢
      • 2011-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-13
      • 2018-05-23
      • 1970-01-01
      • 2012-10-18
      相关资源
      最近更新 更多