按自定义排序顺序对字符串元素列表进行排序

问题描述 投票:0回答:1

我有一个用例,我需要按自定义排序顺序对字符串列表进行排序。 将输入列表视为 - ["segment", "sub_category", "category", "segment"],排序后sortedList应为- ["category", "sub_category", "segment", "segment"]。

我已将其排序如下 -

Map<String, Integer> orderMap = new HashMap<>();
orderMap.put("category", 1);
orderMap.put("sub_category", 2);
orderMap.put("segment", 3);

    Comparator comp = new Comparator() {
    public int compare(String s1, String s2) {
        orderMap.get(s1) - orderMap.get(s2);
    }
}

上面的代码确实以我的自定义排序顺序返回列表,即 - [“category”,“sub_category”,“segment”,“segment”]。

但是,我只是关心这在空间和时间复杂度方面是否是最好的方法,或者是否有更好、更简单的方法来实现自定义排序。 如果有人请帮助和指导我。

java sorting stream
1个回答
0
投票

在这种情况下,我将定义一个类似的枚举

enum SortKey {
  CATEGORY,
  SUB_CATEGORY,
  SEGMENT
}

注意如何以所需的排序顺序声明这些值。然后我编写一个方法将字符串映射到排序键。

private static SortKey valueOfMyString(String myString) {
  return switch(myString) {
    case "category" -> CATEGORY
    case "sub_category" -> SUB_CATEGORY
    case "segment" -> SEGMENT
    default -> throw new AssertionError(myString)
  };
}

最后定义一个比较器

Comparator.comparing(s -> valueOfMyString(s);
© www.soinside.com 2019 - 2024. All rights reserved.