Java 如何使用字符串、数字和空字符串对列表进行排序?
上下文:Java 如何使用字符串、数字和空字符串对列表进行排序?,java,arrays,sorting,collections,android-recyclerview,Java,Arrays,Sorting,Collections,Android Recyclerview,上下文: + 1º + 2º R/C R/C "" -> Empty string because there is no information about it 我有一个要排序的楼层列表,可以在android的回收器视图中显示: 现有楼层示例: + 1º + 2º R/C R/C "" -> Empty string because there is no information about it 目标: 我需要以desc和asc的方式对地板进行排序 代码: 这是我的代码,问
+ 1º
+ 2º
R/C
R/C
"" -> Empty string because there is no information about it
我有一个要排序的楼层列表,可以在android的回收器视图中显示:
现有楼层示例:
+ 1º
+ 2º
R/C
R/C
"" -> Empty string because there is no information about it
目标:
我需要以desc和asc的方式对地板进行排序
代码:
这是我的代码,问题是有些楼层有字母和空字符串,就像你上面看到的,我不能用字母和空字符串来做Integer.parseInt(给出了NumberFormatException)。我之所以进行这种转换,是因为我认为我需要将变量传递给Int,以便进行排序。我想我不能这样做,因为地板上可能会有你在示例中看到的字母
Collections.sort(listUAs, new Comparator<ModelUA>() {
@Override
public int compare(ModelUA lhs, ModelUA rhs) {
// -1 - less than, 1 - greater than, 0 - equal, all inversed for descending
int floorLhs = Integer.parseInt(lhs.getFloor().replaceAll("[^\\d]", ""));
int floorIntRhs = Integer.parseInt(rhs.getFloor().replaceAll("[^\\d]", ""));
return Integer.compare(floorIntRhs, floorLhs);
}
});
Collections.sort(listUAs,newcomparator(){
@凌驾
公共整数比较(ModelUA lhs、ModelUA rhs){
//-1-小于,1-大于,0-等于,降序时全部反转
int-floorLhs=Integer.parseInt(lhs.getFloor().replaceAll(“[^\\d]”,“);
int-floorprintrhs=Integer.parseInt(rhs.getFloor().replaceAll(“[^\\d]”,“”));
返回整数。比较(FloorPrintRhs、floorLhs);
}
});
有人能提供更好的解决方案来改进吗?只需按字典顺序比较字符串即可。在你遇到更复杂的情况之前,这通常就足够了 这很冗长,但它应该演示如何做。这其中的大部分只是一个完整的例子。向下滚动至调用
models。对其内容进行排序
package mandelbrot_redo.seesaw_main;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;
public class ModelUA {
private String floor;
public ModelUA(String floor) {
this.floor = floor;
}
public String getFloor() {
return this.floor;
}
public static void main(String[] args) {
// Unsorted floor strings
List<String> floorStrs =
Arrays.asList("R/C",
"+ 1º",
"R/C",
"+ 2º",
"");
// Wrap each floor string in a ModelUA
List<ModelUA> models = floorStrs.stream().map(ModelUA::new).collect(Collectors.toList());
models.sort(new Comparator<ModelUA>() {
@Override
public int compare(ModelUA m1, ModelUA m2) {
// Just delegate to the string compare method
return m1.getFloor().compareTo(m2.getFloor());
}
});
for (ModelUA m : models) {
System.out.println(m.getFloor());
}
}
}
要反转排序顺序,您只需将比较中的模型交换到行即可:
m2.getFloor().compareTo(m1.getFloor());
为什么-1@Carcigenicate,为什么编辑为空?你没有理由投反对票,梅没有投反对票。但是,我确实删除了带前缀的选项卡,因为这会导致“上下文”被格式化为代码,这会妨碍可读性。@Carcigenicate您能帮我解决这个问题吗?字符串已经提供了一种compare
方法,允许对词典进行比较。你不能直接比较字符串吗?为什么需要解析它们?不要调用Integer/parseInt
,然后返回floorLhs.compareTo(floorRhs)
。