【问题标题】:Sorting ArrayList to rearrange by a specific string [duplicate]对ArrayList进行排序以按特定字符串重新排列[重复]
【发布时间】:2021-10-01 11:13:38
【问题描述】:

我正在尝试按特定字符串重新排列我的 ArrayList。所以我想重新排列我的列表,优先考虑“卡车”类型而不是“轿车”类型或“SUV”类型。从技术上讲,我可以从他们的字母顺序中使用 reverseorder,但我想在特定字符串本身具有优先级的地方实现。例如,如果我有如下随机顺序的汽车列表,

ArrayList<Car> cars = new ArrayList<Car>(Arrays.asList(
new Car("1", "truck"), 
new Car("2", "sedan"), 
new Car("3", "SUV"), 
new Car("4", "truck"), 
new Car("5", "truck"));

所以我的理想顺序应该是 1,4,5,2,3。我很感激任何想法!

【问题讨论】:

  • 嗯,现在我要问了。您是否不知道如何使用比较器(这是重复链接所解释的),或者您是否特别不知道如何让比较器按您想要的顺序排序?

标签: java sorting arraylist


【解决方案1】:

就在我的头顶,l。首先对于“类型”,我将创建一个具有“优先级”属性(可能是整数)的所有类型的枚举。如果这是您编写/有权编辑的自定义类,我将在您更改类后在汽车类上实现可比较的接口,因此“类型”使用枚举而不是字符串。只要枚举与给定的字符串匹配,您就可以使用搜索方法将字符串与枚举名称匹配(不确定是否区分大小写),请参阅此处以获取有关如何实现的好示例 可比接口https://www.javatpoint.com/Comparable-interface-in-collection-framework。然后根据枚举优先级值实现比较。

【讨论】:

    【解决方案2】:

    您可以根据List 中的索引进行排序。

    List<String> order = Arrays.asList("truck", "sedan", "SUV");
    cars.sort(Comparator.comparingInt(c -> order.indexOf(c.getType()));
    

    【讨论】:

    • OP 说“优先考虑“卡车”类型而不是“轿车”类型或“SUV”类型”所以他们想要的实际上是一种不按词汇顺序排列的排序。
    • @markspace 我的解决方案没有按字典顺序排序。
    • 这就是所要求的...
    • @Zevrant 你是什么意思?
    • 误读了我的错误
    猜你喜欢
    • 1970-01-01
    • 2021-11-24
    • 2017-02-23
    • 1970-01-01
    • 2018-10-12
    • 1970-01-01
    • 1970-01-01
    • 2014-02-13
    • 2011-08-14
    相关资源
    最近更新 更多