对ArrayList进行排序,以使某些数字先行,否则会保留顺序 publicstaticarraylistnewother(arraylistsheetdata){ ArrayList temporary=新的ArrayList(); 对于(int i=0;i100){ 临时。添加(列表); 数据表。删除(i); 我--; } } } 对于(int i=0;i100); } 公共静态ArrayList newTogether(ArrayList sheetData){ ArrayList temp=新的ArrayList(sheetData); Collections.sort(temp,newcomparator(){ 公共整数比较(ArrayList a、ArrayList b){ if(biggerThan100(a)和&!biggerThan100(b))返回-1; 否则如果(biggerThan100(b)和&!biggerThan100(a))返回1; 否则返回0; } }); 返回温度; } 您是否添加了println语句以查看if分支是否实际被执行?在我看来,if语句从未执行过。你确定你需要考虑3-rd元素(记住这是第四列)…我有,我应该把它添加到问题中。如果我将println添加到If中,我将一无所获。但是,你知道是什么原因造成的吗?是的,我在找第四栏。它是整数和字符串的混合体。您是否尝试过在if行中添加断点?我有一种奇怪的感觉,字符串没有被正确地解析,尽管大多数是整数,但它们都返回1(CELL_TYPE_string)。我得看看这个。我不能在学校的计算机上使用Java8,县里的更新不会超过Java6。对Collections.sort进行26、281、34的排序吗?我将代码改为使用Java6。和Collections.sort按照Comparator对象指示的方式对列表进行排序。在这种情况下,它将把所有的列表放在开头,在第3位有一个大于100的数字,否则它将保持顺序不变。 private static boolean biggerThan100(ArrayList<HSSFCell> list) { return list.get(3).getCellType() == Cell.CELL_TYPE_NUMERIC && (Integer.parseInt(list.get(3).getStringCellValue()) > 100); } public static ArrayList<ArrayList<HSSFCell>> newTogether(ArrayList<ArrayList<HSSFCell>> sheetData) { ArrayList<ArrayList<HSSFCell>> temp = new ArrayList<>(sheetData); Collections.sort(temp, new Comparator<ArrayList<HSSFCell>>() { public int compare(ArrayList<HSSFCell> a, ArrayList<HSSFCell> b) { if(biggerThan100(a) && !biggerThan100(b)) return -1; else if(biggerThan100(b) && !biggerThan100(a)) return 1; else return 0; } }); return temp; }

对ArrayList进行排序,以使某些数字先行,否则会保留顺序 publicstaticarraylistnewother(arraylistsheetdata){ ArrayList temporary=新的ArrayList(); 对于(int i=0;i100){ 临时。添加(列表); 数据表。删除(i); 我--; } } } 对于(int i=0;i100); } 公共静态ArrayList newTogether(ArrayList sheetData){ ArrayList temp=新的ArrayList(sheetData); Collections.sort(temp,newcomparator(){ 公共整数比较(ArrayList a、ArrayList b){ if(biggerThan100(a)和&!biggerThan100(b))返回-1; 否则如果(biggerThan100(b)和&!biggerThan100(a))返回1; 否则返回0; } }); 返回温度; } 您是否添加了println语句以查看if分支是否实际被执行?在我看来,if语句从未执行过。你确定你需要考虑3-rd元素(记住这是第四列)…我有,我应该把它添加到问题中。如果我将println添加到If中,我将一无所获。但是,你知道是什么原因造成的吗?是的,我在找第四栏。它是整数和字符串的混合体。您是否尝试过在if行中添加断点?我有一种奇怪的感觉,字符串没有被正确地解析,尽管大多数是整数,但它们都返回1(CELL_TYPE_string)。我得看看这个。我不能在学校的计算机上使用Java8,县里的更新不会超过Java6。对Collections.sort进行26、281、34的排序吗?我将代码改为使用Java6。和Collections.sort按照Comparator对象指示的方式对列表进行排序。在这种情况下,它将把所有的列表放在开头,在第3位有一个大于100的数字,否则它将保持顺序不变。 private static boolean biggerThan100(ArrayList<HSSFCell> list) { return list.get(3).getCellType() == Cell.CELL_TYPE_NUMERIC && (Integer.parseInt(list.get(3).getStringCellValue()) > 100); } public static ArrayList<ArrayList<HSSFCell>> newTogether(ArrayList<ArrayList<HSSFCell>> sheetData) { ArrayList<ArrayList<HSSFCell>> temp = new ArrayList<>(sheetData); Collections.sort(temp, new Comparator<ArrayList<HSSFCell>>() { public int compare(ArrayList<HSSFCell> a, ArrayList<HSSFCell> b) { if(biggerThan100(a) && !biggerThan100(b)) return -1; else if(biggerThan100(b) && !biggerThan100(a)) return 1; else return 0; } }); return temp; },java,sorting,arraylist,Java,Sorting,Arraylist,我试图用我的代码做的是让2D ArrayList取出任何大于100的数字,并将它们放在ArrayList的开头,同时保留其余元素的顺序。但是,这段代码只是按照原始顺序返回一个ArrayList,如果我将println添加到if,则什么也得不到。有人能指出我做错了什么吗?您是否尝试过在第一个if前面放一个println来检查getStringCellValue()返回的内容 顺便说一句,因为根据API文档,Collections.sort保证是稳定的,所以您可以使用它。应该比你的方式更快 可能是这

我试图用我的代码做的是让2D ArrayList取出任何大于100的数字,并将它们放在ArrayList的开头,同时保留其余元素的顺序。但是,这段代码只是按照原始顺序返回一个ArrayList,如果我将
println
添加到
if
,则什么也得不到。有人能指出我做错了什么吗?

您是否尝试过在第一个if前面放一个println来检查getStringCellValue()返回的内容

顺便说一句,因为根据API文档,Collections.sort保证是稳定的,所以您可以使用它。应该比你的方式更快

可能是这样的

public static ArrayList<ArrayList<HSSFCell>> newTogether(ArrayList<ArrayList<HSSFCell>> sheetData) {
    ArrayList<ArrayList<HSSFCell>> temporary = new ArrayList<ArrayList<HSSFCell>>();
    for(int i = 0; i < sheetData.size(); i++) {
        ArrayList<HSSFCell> list = sheetData.get(i);
        if (list.get(3).getCellType() == Cell.CELL_TYPE_NUMERIC) {
            if(Integer.parseInt(list.get(3).getStringCellValue()) > 100) {
                temporary.add(list);
                sheetData.remove(i);
                i--;
            }
        }
    }
    for(int i = 0; i < sheetData.size(); i++) {
        ArrayList<HSSFCell> list = sheetData.get(i);
        temporary.add(list);
    }
    return temporary;
}
private静态布尔biggerThan100(ArrayList列表){
返回list.get(3).getCellType()==Cell.Cell\u TYPE\u NUMERIC&&
(Integer.parseInt(list.get(3.getStringCellValue())>100);
}
公共静态ArrayList newTogether(ArrayList sheetData){
ArrayList temp=新的ArrayList(sheetData);
Collections.sort(temp,newcomparator(){
公共整数比较(ArrayList a、ArrayList b){
if(biggerThan100(a)和&!biggerThan100(b))返回-1;
否则如果(biggerThan100(b)和&!biggerThan100(a))返回1;
否则返回0;
}
});
返回温度;
}

您是否添加了
println
语句以查看
if
分支是否实际被执行?在我看来,
if
语句从未执行过。你确定你需要考虑
3
-rd元素(记住这是第四列)…我有,我应该把它添加到问题中。如果我将
println
添加到
If
中,我将一无所获。但是,你知道是什么原因造成的吗?是的,我在找第四栏。它是整数和字符串的混合体。您是否尝试过在
if
行中添加断点?我有一种奇怪的感觉,字符串没有被正确地解析,尽管大多数是整数,但它们都返回1(CELL_TYPE_string)。我得看看这个。我不能在学校的计算机上使用Java8,县里的更新不会超过Java6。对Collections.sort进行26、281、34的排序吗?我将代码改为使用Java6。和Collections.sort按照Comparator对象指示的方式对列表进行排序。在这种情况下,它将把所有的列表放在开头,在第3位有一个大于100的数字,否则它将保持顺序不变。
private static boolean biggerThan100(ArrayList<HSSFCell> list) {
  return list.get(3).getCellType() == Cell.CELL_TYPE_NUMERIC &&
      (Integer.parseInt(list.get(3).getStringCellValue()) > 100);
}

public static ArrayList<ArrayList<HSSFCell>> newTogether(ArrayList<ArrayList<HSSFCell>> sheetData) {
  ArrayList<ArrayList<HSSFCell>> temp = new ArrayList<>(sheetData);
  Collections.sort(temp, new Comparator<ArrayList<HSSFCell>>() {
      public int compare(ArrayList<HSSFCell> a, ArrayList<HSSFCell> b) {
        if(biggerThan100(a) && !biggerThan100(b)) return -1;
        else if(biggerThan100(b) && !biggerThan100(a)) return 1;
        else return 0;
      }
  });
  return temp;
}