java - 使用一些规则对文本进行排序

标签 java sorting

我有一个数组列表,如下

100 AAA 500-1 Lorem Ipsum
100 BBB 500-2 Lorem Ipsum
101 AAA 500-1 Lorem Ipsum
101 AAA 500-2 Lorem Ipsum
100 BBB 500-3 Lorem Ipsum

我希望将其排序为

101 AAA 500-1 Lorem Ipsum
101 AAA 500-2 Lorem Ipsum
100 AAA 500-1 Lorem Ipsum
100 BBB 500-2 Lorem Ipsum
100 BBB 500-3 Lorem Ipsum

首先,按数字降序 (101, 100)。

第二,按三个字母单词升序(AAA、BBB)。

第三,按第三列升序(500-1, 500-2, 500-3)

我可以按空格分割每个元素并获取单个单词并进行排序。但是有人可以用其他方式或已知算法帮助我吗? 如果您需要更多信息,请告诉我。

提前谢谢您。

最佳答案

创建 Comparator会解决你的问题。 你应该实现这样的东西:

public class MyComparator implements Comparator<MyObject> {    
  public int compare(MyObject o1, MyObject o2) {
    if (o1 == null || o2 == null) {
      throw new NullPointerException();
    }    
    if (o1.getValue1() != o2.getValue1()) {
      return Integer.compare(o1.getValue1(), o2.getValue1());
    }    
    return Integer.compare(o1.getValue2(), o2.getValue2());
  }
}

当然还有更多方法可以解决这个问题,例如,您可以实现自己的排序算法。但是,我认为使用 Comparator 是解决该问题的正确“java-way”。

关于java - 使用一些规则对文本进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16358894/

相关文章:

java - LibGdx Box2dLights : How to make Chain Lights emit light in all directions?

c++ - 计算交换次数以插入以递增顺序对整数数组进行排序的有效方法

Java排序错误,打印出0的数组而不是数组的值

python - 如何按反向排序元组,但不反向打破关系? (Python)

javascript - 对每个实体具有多个相关行的表进行排序

java - 如何在jsp页面中检查session是否存在

java - `gradle install`如何生成 `pom.xml`文件

java - 大小写切换java编译错误

java - Spring Rabbit 和 JDBC 事务问题

c++ - 计算合并排序算法的交换/比较次数