用字符串和整数对文本文件进行排序。

问题描述 投票:0回答:1

所以目前我正在做一个项目,只是帮助我练习java。我有一个游戏,我按照一个教程做了一些修改,现在我想找出一种方法,用String后面的Integer对一个文本文件进行排序。我之前的尝试都失败了,我还没有在网上找到真正有效的资源。我已经成功地使用字符串按字母顺序排序,但我想按整数值排序。

文本文件示例

abc 31
adc 100
ccd 211
ddc 99

第一列是玩家的名字,第二列是玩家在我的游戏中得到的分数。

我希望以最高的 "分数 "或整数值来排序,这将在以后用来显示高分排行榜。

示例排序

ccd 211
adc 100
ddc 99
abc 31

我已经尝试将信息添加到arrayList中,并使用collection.sort(),我还尝试了一个更深入的路线,以帮助我了解更多的地图是如何工作的,通过创建并将每行信息添加到地图中,用entrySet()创建一个链接列表,然后使用collection.sort(list,new comparator()),这是我相信我的逻辑在某些点上失败的地方,或者是我对地图了解不多的事实。

真的很感谢任何帮助。

java linked-list maps
1个回答
1
投票

如你所说,你已经用String成功地进行了排序。因此,你知道如何访问文件并将其存储在数据结构中.所以现在让我们专注于基于Integer的排序.让我们考虑String和Integer存储在key_value HashMap中。

HashMap<String, Integer> key_value = new HashMap<String, Integer>();

现在让我们按降序排序。

String display = "";
List<Map.Entry<String, Integer>> list =
    new LinkedList<Map.Entry<String, Integer>>(key_value.entrySet());
Collections.sort(list, new Comparator<Map.Entry<String, Integer>>() {
  public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
    return (o2.getValue()).compareTo(o1.getValue());
  }
});
for (Map.Entry<String, Integer> temp : list) {
  display += "\n " + temp.getKey() + " : " + temp.getValue();
}

对于升序,只需将

return (o2.getValue()).compareTo(o1.getValue());

改为

return (o1.getValue()).compareTo(o2.getValue());

0
投票

从你的解释来看,似乎你已经对你的Strings进行了排序,所以我就不这么做了。

String[] list = {"abc", "adc", "ccd", "ddc"};
Integer[] intList = {100, 211, 99, 31};
Arrays.sort(intList);
for (int i = 0; i < 4; i++) {
    System.out.println(list[i] + ' ' + intList[i]);
}

我们对我们的 Integer 阵列与 util.Arrays,然后我们在数组中迭代并打印。

根据你的编辑,我们可以使用地图,从地图中获取键和值,对它们进行排序,然后打印,如下所示。

        Map<String, Integer> hm = new HashMap<String, Integer>();
        hm.put("abc", 211);
        hm.put("ddc", 100);
        hm.put("adc", 31);
        hm.put("ccd", 99);
        List hmKeys = new ArrayList(hm.keySet());
        Collections.sort(hmKeys);
        List hmVals = new ArrayList(hm.values());
        Collections.sort(hmVals);
© www.soinside.com 2019 - 2024. All rights reserved.