jackson 使用提供的Comparator初始化SortedSet

cwxwcias  于 7个月前  发布在  其他
关注(0)|答案(2)|浏览(75)

有没有可能用提供的Comparator来实现SortedSet或TreeSet(或者SortedMap或TreeMap)?

ncecgwcz

ncecgwcz1#

有一个开放的Jackson问题(jackson-databind#2162),允许在对SortedMap进行格式化时指定Comparator。它自2018年10月以来一直开放,但看起来没有做任何工作。

hof1towb

hof1towb2#

一种解决方案是创建一个自定义的Converter,它将SortedSet转换为使用所需Comparator排序的SortedSet

public static class MyStringSetConverter
        extends StdConverter<SortedSet<String>, SortedSet<String>> {
    private static final Comparator<String> COMPARATOR =
            String.CASE_INSENSITIVE_ORDER
                    .thenComparing(Comparator.naturalOrder());

    @Override
    public SortedSet<String> convert(SortedSet<String> value) {
        SortedSet<String> sortedSet = new TreeSet<>(COMPARATOR);
        sortedSet.addAll(value);
        return sortedSet;
    }
}
public static class MyType {
    @JsonDeserialize(converter = MyStringSetConverter.class)
    private SortedSet<String> value;

    public SortedSet<String> getValue() { return value; }
    public void setValue(SortedSet<String> value) { this.value = value; }
    public String toString() { return Objects.toString(value); }
}

相关问题