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
目标: 我需要以descasc的方式对地板进行排序

代码: 这是我的代码,问题是有些楼层有字母和空字符串,就像你上面看到的,我不能用字母和空字符串来做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)