【问题标题】:What does this Android/Java code do? [closed]这个 Android/Java 代码有什么作用? [关闭]
【发布时间】:2012-09-30 10:06:25
【问题描述】:

我是 Android 编码新手。我被投入到一个项目中,下面的代码可以工作,但我并不真正理解它,这并不能真正帮助我学习。有人会用每个阶段正在做什么来评论代码吗?

SharedPreferences myPrefs = this.getSharedPreferences("FileName", MODE_PRIVATE);
        TreeMap<String, ?> keys = new TreeMap<String, Object>(myPrefs.getAll());
        for (Map.Entry<String, ?> entry : keys.entrySet()) {
            Log.i("map values", entry.getKey());

        }


      List<Pair<Object, String>> sortedByValue = new LinkedList<Pair<Object,String>>();
        for (Map.Entry<String, ?> entry : keys.entrySet()) {
            Pair<Object, String> e = new Pair<Object, String>(entry.getValue(), entry.getKey());
            sortedByValue.add(e);
        }


     // Pair doesn't have a comparator, so you're going to need to write one.
        Collections.sort(sortedByValue, new Comparator<Pair<Object, String>>() {
            public int compare(Pair<Object, String> lhs, Pair<Object, String> rhs) {

                String sls = String.valueOf(lhs.first);
                String srs = String.valueOf(rhs.first);
                int res = sls.compareTo(srs);
                // Sort on value first, key second
                return res == 0 ? lhs.second.compareTo(rhs.second) : res;
            }
        });

        for (Pair<Object, String> pair : sortedByValue) {
            Log.i("map values", pair.first + "/" + pair.second);
        }


      Collection<?> stringArrayList = keys.values();
      final CharSequence[] prefsCharSequence = stringArrayList.toArray(new CharSequence[stringArrayList.size()]);

【问题讨论】:

  • 将来,您可能应该在调试器中单步执行代码,看看它在做什么。那么,如果您仍有疑问,请在 SO 上发帖。你实际上并没有问一个具体的问题
  • 这不是 SO 的用途。如果您不了解代码的作用,则不应使用代码。问问你是从谁那里得到的。 (并且您从网络中提取的任何代码都应该有它的描述。)

标签: android comments


【解决方案1】:
SharedPreferences myPrefs = this.getSharedPreferences("FileName", MODE_PRIVATE);
    TreeMap<String, ?> keys = new TreeMap<String, Object>(myPrefs.getAll());
    for (Map.Entry<String, ?> entry : keys.entrySet()) {
        Log.i("map values", entry.getKey());

    }

在共享首选项文件中记录所有键值对。

List<Pair<Object, String>> sortedByValue = new LinkedList<Pair<Object,String>>();
    for (Map.Entry<String, ?> entry : keys.entrySet()) {
        Pair<Object, String> e = new Pair<Object, String>(entry.getValue(), entry.getKey());
        sortedByValue.add(e);
    }

将具有所有设置的 Map 转换为 List 进行排序

Collections.sort(sortedByValue, new Comparator<Pair<Object, String>>() {
        public int compare(Pair<Object, String> lhs, Pair<Object, String> rhs) {

            String sls = String.valueOf(lhs.first);
            String srs = String.valueOf(rhs.first);
            int res = sls.compareTo(srs);
            // Sort on value first, key second
            return res == 0 ? lhs.second.compareTo(rhs.second) : res;
        }
    });

自定义比较器对对列表进行排序。它比较值。如果它们相等,则比较第二个值。

for (Pair<Object, String> pair : sortedByValue) {
        Log.i("map values", pair.first + "/" + pair.second);
    }

打印排序后的首选项。

  Collection<?> stringArrayList = keys.values();
  final CharSequence[] prefsCharSequence = stringArrayList.toArray(new CharSequence[stringArrayList.size()]);

将 SharedPreferences 文件中的键转换为 Collection,然后将其转换为字符串列表。

【讨论】:

  • 谢谢,非常感谢
猜你喜欢
  • 1970-01-01
  • 2017-08-19
  • 1970-01-01
  • 2012-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-20
相关资源
最近更新 更多