有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java按数值对ArrayList<String>进行排序

我有一个视频分辨率列表,如下所示:

“1024x768”、“800x600”、“1280x1024”等

我想根据字符串第一部分的数值对其进行排序。 也就是说,上面的内容应该是这样的:

“800x600”、“1024x768”、“1280x1024”

有没有一种快速而肮脏的方法可以做到这一点,我的意思是用不到2-3行代码?如果不是,正确的方法是什么?我得到的值来自一个不是我自己的对象。它确实有一个getWidth()和getHeight()方法返回int


共 (5) 个答案

  1. # 1 楼答案

    如果数组中的对象是带有getWidth方法的Resolution实例,则可以使用Comparator对这些对象进行排序:

    Collections.sort(resolutions, new Comparator {
        public int compare(Resolution r1, Resolution r2) {
            return Integer.valueOf(r1.getWidth()).compareTo(Integer.valueOf(r2.getWidth()));
        }
    });
    
  2. # 2 楼答案

    使用比较器是可行的,但是如果你有很多值,它会变得很慢,因为它会多次解析每个字符串

    另一种方法是将每个值添加到树形图中,以所需的数字作为键,即Integer.valueOf(s.substring(0,s.indexOf('x'))),然后从treeMap.values()中排序的值创建一个新的ArrayList

  3. # 3 楼答案

    Shadwell在his answer中提出的解决方案是正确且惯用的

    但是,如果您正在寻找更简洁的解决方案,那么我建议您使用lambdaj,这将使您能够编写如下代码:

    List<Resolution> sortedResolutions = sort(resolutions, on(Resolution.class).getWidth());
    
  4. # 4 楼答案

    使用自定义比较器通过Collections api对ArrayList进行排序

    Collections.sort(resolutionArrayList, new ResolutionComparator())
    
  5. # 5 楼答案

    正确的方法是编写对字符串进行操作的比较器实现,但它最多解析第一个非数字字符。然后,它从中创建一个int,并比较int

    然后可以将该比较器的实例传递到集合中。将()与列表一起排序