有 Java 编程相关的问题?

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

java根据点击数对2D数组进行排序

我有两个ArrayList:

数组01:

ArrayList<String> uniqueFiletypes --> which contains unique filetypes (e.g .zip etc..)

数组02:

ArrayList<Integer> countFiletypes --> which counts how many of each filetype there is, for example 8 .zip's

然后直接跳到问题:

我需要做一些“排名”,这意味着最高数量的文件类型将获得第一名,等等

另一个问题:它必须是一个对象[](为了支持JTable),因此可以很容易地显示结果

输出示例:我有8个。拉链,5。java和2。docx

Object[][] = {{"1", ".zip", "8"},{"2", ".java", "5"}, {"3", ".docx", "2"}}

其中{PLACE,FILETYPE,COUNT}


共 (2) 个答案

  1. # 1 楼答案

    • 第一种方法:在使用JTable时,使用TableRowSorter,如demo example of tutorial page

    • 第二种方法:假设您不仅需要JTable

      Object[][] array = {{"1", ".zip", "8"},{"2", ".java", "5"}, {"3", ".docx", "2"}};
      List<Object[]>data = Arrays.asList(array);
      Comparator<Object[]>comparator = new Comparator<Object[]>() {
      
        @Override
        public int compare(Object[] o1, Object[] o2) {
      
          return ((String)o1[2]).compareTo((String)o2[2]);
        }
      
      
      };
      
      Collections.sort(data, Collections.reverseOrder(comparator));
      
      array = (Object[][]) data.toArray();
      
  2. # 2 楼答案

    我假设两个列表中的项目顺序匹配。也就是说,uniqueFiletypes列表中的第一项的点击数等于countFiletypes列表中的第一个数字

    我会做以下几件事:

    1. 循环浏览列表,将条目添加到地图中

    2. 按降序排列CountFileType列表

    3. 从映射中提取文件类型,按照它们现在在有序列表中的顺序添加它们

    下面这样的方法可能会奏效:

    public static void main(final String[] args) {
        final ArrayList<String> uniqueFileTypes = new ArrayList<String>();
        uniqueFileTypes.add(".java");
        uniqueFileTypes.add(".zip");
        uniqueFileTypes.add(".docx");
    
        final ArrayList<Integer> countFileTypes = new ArrayList<Integer>();
        countFileTypes.add(5);
        countFileTypes.add(8);
        countFileTypes.add(2);
    
        final Map<Integer, String> countedFileTypes = new HashMap<Integer, String>();
    
        for (int i = 0; i< uniqueFileTypes.size(); i++ ) {
            countedFileTypes.put(countFileTypes.get(i), uniqueFileTypes.get(i) );
        }
    
        Collections.sort(countFileTypes);
        Collections.reverse(countFileTypes);
    
        final Object[][] data = new Object[countedFileTypes.size()][3];
    
        for(int i = 0; i<countedFileTypes.size(); i++) {
            final Integer count = countFileTypes.get(i);
            data[i] = new Object[]{(i+1), countedFileTypes.get(count), count};
            System.out.println("{" + (i+1) + "," + countedFileTypes.get(count) + "," + count + "}");
        }
    }
    

    主方法和系统输出并不是真正需要的,我只是用它们来测试我的解决方案,它产生了以下输出:

    {1,.zip,8}
    {2,.java,5}
    {3,.docx,2}
    

    诚然,这意味着点击次数和文件类型之间存在联系,这可能不是真的。例如,如果docx和java文件格式都有9次点击,那么这个解决方案就不起作用