### 版本情况

JDK版本：    openjdk_8_201
hutool版本： 5.8.27

### 问题描述（包括截图）
FuncComparator 继承 NullComparator 的构造方法传入 comparator 为 null，但是 NullComparator 重写的 thenComparing 判空了 comparator ，导致 FuncComparator.thenComparing 永远都使用 other 来排序，无法实现次排序。

![image](https://github.com/dromara/hutool/assets/24667339/2d6a5707-61fc-4112-bd20-7f2913756849)

![image](https://github.com/dromara/hutool/assets/24667339/7f1ee806-1170-4b57-8a32-4a67cc547e90)

1. 复现代码

```java
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class FuncComparatorTest {

    List<Bean> template = CollUtil.newArrayList(
            Bean.of(2, 2),
            Bean.of(1, 3),
            Bean.of(2, 1),
            Bean.of(1, 1),
            Bean.of(2, 3),
            Bean.of(1, 2)
    );

    /**
     * 原文
     */
    @Order(1)
    @Test
    public void original() {
        List<Bean> list = ObjectUtil.cloneByStream(template);

        System.out.println("----------原文的----------");
        list.forEach(System.out::println);
    }

    /**
     * 正常的
     */
    @Order(2)
    @Test
    public void right() {
        List<Bean> list = ObjectUtil.cloneByStream(template);

        FieldsComparator<Bean> comparator = new FieldsComparator<>(Bean.class, "a", "b");

        list.sort(comparator);

        System.out.println("----------正常的----------");
        list.forEach(System.out::println);
    }

    /**
     * 错误的
     */
    @Order(3)
    @Test
    public void wrong() {
        List<Bean> list = ObjectUtil.cloneByStream(template);

        PropertyComparator<Bean> comparatorA = new PropertyComparator<>("a");
        PropertyComparator<Bean> comparatorB = new PropertyComparator<>("b");

        list.sort(comparatorA.thenComparing(comparatorB));
        System.out.println("----------错误的----------");
        list.forEach(System.out::println);
    }

    @Data
    @NoArgsConstructor
    @AllArgsConstructor(staticName = "of")
    public static class Bean implements Serializable {
        private Integer a;
        private Integer b;

        @Override
        public String toString() {
            return StrUtil.format("a={}, b={}", a, b);
        }
    }
}
```

2. 堆栈信息

期望结果
```
a=1, b=1
a=1, b=2
a=1, b=3
a=2, b=1
a=2, b=2
a=2, b=3
```
实际结果
```
a=1, b=1
a=2, b=1
a=1, b=2
a=2, b=2
a=1, b=3
a=2, b=3
```

4. 测试涉及到的文件（注意脱密）

比如报错的Excel文件，有问题的图片等。
FuncComparator.thenComparing 不生效
This is a GitHub Issue
repo:hutool
owner:dromara
Title : FuncComparator.thenComparing 不生效
Issue date:

--- start body ---
### 版本情况

JDK版本：    openjdk_8_201
hutool版本： 5.8.27

### 问题描述（包括截图）
FuncComparator 继承 NullComparator 的构造方法传入 comparator 为 null，但是 NullComparator 重写的 thenComparing 判空了 comparator ，导致 FuncComparator.thenComparing 永远都使用 other 来排序，无法实现次排序。

![image](https://github.com/dromara/hutool/assets/24667339/2d6a5707-61fc-4112-bd20-7f2913756849)

![image](https://github.com/dromara/hutool/assets/24667339/7f1ee806-1170-4b57-8a32-4a67cc547e90)

1. 复现代码

```java
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class FuncComparatorTest {

    List<Bean> template = CollUtil.newArrayList(
            Bean.of(2, 2),
            Bean.of(1, 3),
            Bean.of(2, 1),
            Bean.of(1, 1),
            Bean.of(2, 3),
            Bean.of(1, 2)
    );

    /**
     * 原文
     */
    @Order(1)
    @Test
    public void original() {
        List<Bean> list = ObjectUtil.cloneByStream(template);

        System.out.println("----------原文的----------");
        list.forEach(System.out::println);
    }

    /**
     * 正常的
     */
    @Order(2)
    @Test
    public void right() {
        List<Bean> list = ObjectUtil.cloneByStream(template);

        FieldsComparator<Bean> comparator = new FieldsComparator<>(Bean.class, "a", "b");

        list.sort(comparator);

        System.out.println("----------正常的----------");
        list.forEach(System.out::println);
    }

    /**
     * 错误的
     */
    @Order(3)
    @Test
    public void wrong() {
        List<Bean> list = ObjectUtil.cloneByStream(template);

        PropertyComparator<Bean> comparatorA = new PropertyComparator<>("a");
        PropertyComparator<Bean> comparatorB = new PropertyComparator<>("b");

        list.sort(comparatorA.thenComparing(comparatorB));
        System.out.println("----------错误的----------");
        list.forEach(System.out::println);
    }

    @Data
    @NoArgsConstructor
    @AllArgsConstructor(staticName = "of")
    public static class Bean implements Serializable {
        private Integer a;
        private Integer b;

        @Override
        public String toString() {
            return StrUtil.format("a={}, b={}", a, b);
        }
    }
}
```

2. 堆栈信息

期望结果
```
a=1, b=1
a=1, b=2
a=1, b=3
a=2, b=1
a=2, b=2
a=2, b=3
```
实际结果
```
a=1, b=1
a=2, b=1
a=1, b=2
a=2, b=2
a=1, b=3
a=2, b=3
```

4. 测试涉及到的文件（注意脱密）

比如报错的Excel文件，有问题的图片等。
--- end body ---
