java 8 对JSONArray 按指定字段排序,升序和倒序

以前在内存中用大数据量的排序不论使用冒泡排序还是使用Collections.sort效率都相当低下,现如今Java 8 出现了Comparator 首先这并不是一个方法,而是一个接口

@FunctionalInterface
public interface Comparator<T> {
}

 在此不过多阐述它实现的原理,只在这里介绍它的两个实现方法

/**
     * Accepts a function that extracts a {@link java.lang.Comparable
     * Comparable} sort key from a type {@code T}, and returns a {@code
     * Comparator<T>} that compares by that sort key.
     *
     * <p>The returned comparator is serializable if the specified function
     * is also serializable.
     *
     * @apiNote
     * For example, to obtain a {@code Comparator} that compares {@code
     * Person} objects by their last name,
     *
     * <pre>{@code
     *     Comparator<Person> byLastName = Comparator.comparing(Person::getLastName);
     * }</pre>
     *
     * @param  <T> the type of element to be compared
     * @param  <U> the type of the {@code Comparable} sort key
     * @param  keyExtractor the function used to extract the {@link
     *         Comparable} sort key
     * @return a comparator that compares by an extracted key
     * @throws NullPointerException if the argument is null
     * @since 1.8
     */
    public static <T, U extends Comparable<? super U>> Comparator<T> comparing(
            Function<? super T, ? extends U> keyExtractor)
    {
        Objects.requireNonNull(keyExtractor);
        return (Comparator<T> & Serializable)
            (c1, c2) -> keyExtractor.apply(c1).compareTo(keyExtractor.apply(c2));
    }

/**
     * Returns a comparator that imposes the reverse ordering of this
     * comparator.
     *
     * @return a comparator that imposes the reverse ordering of this
     *         comparator.
     * @since 1.8
     */
    default Comparator<T> reversed() {
        return Collections.reverseOrder(this);
    }

一、comparing 方法的使用

从注释信息不难看出 comparing 方法 传入一个函数,这个函数携带一个参数,参数类型为List对象或者JSONArray对象
例子:

//json 字符串
String dd = "[{id:1,adress:上海,age:21},{id:2,adress:上海,age:32},{id:3,adress:上海,age:28},{id:4,adress:上海,age:27}]";
//字符串转对象
JSONArray listObjectFifth = JSONObject.parseArray(dd);
//根据age升序排序
listObjectFifth.sort(Comparator.comparing(obj -> ((JSONObject) obj).getBigDecimal("age")));

二、reversed 方法的使用 

 从注释信息不难看出 reversed 方法返回一个比较器,而且是强制执行此逆序
例子:

//json 字符串
String dd = "[{id:1,adress:上海,age:21},{id:2,adress:上海,age:32},{id:3,adress:上海,age:28},{id:4,adress:上海,age:27}]";
//字符串转对象
JSONArray listObjectFifth = JSONObject.parseArray(dd);
//根据age降序排序
listObjectFifth.sort(Comparator.comparing(obj -> ((JSONObject) obj).getBigDecimal("age")).reversed());

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值