複雑なオブジェクトで構造内の変数深いダウンによって適所にソート一覧

SGテックエッジ:

私は、JSONから解析された複雑な「注文」オブジェクトを持っています。どこか深い構造では、私はorderDateであります。私はそれを文字列として抽出することができます!そして今、私は場所に注文のリストをソートしてみてください。

私は2番目の日付が、Dateオブジェクトに解析され、配列は内部の二つの要素、最初のOrderオブジェクト自体を構成されて新しいリストを作成するアイデア、付属しました。例えば。新しいオブジェクト[] {ため、新しい日付(order.getOrderDate())}。そして、ソート第二の要素とリストとリターンに、その後の解析バックによります。しかし、これは、2つの新しいリストを作成し、場所ではありません。

他のアイデアは、次のようにソートするカスタムコンパレータを作成することです

    orders.sort(new Comparator<Order>() {
        @Override
        public int compare(Order o1, Order o2) {
            return new Date(o1.getOrderDate()).compareTo(new Date(o2.getOrderDate()));
        }
    });

しかし、第二の変形では、新しいDateオブジェクトの多くを作成します。すべてのエントリのためにたくさんの時間最悪のケース。

その周りより美しい方法はありますか?

oleg.cherednik:

これは、作成することが可能ですDate使用して-ユニークな日のためのインスタンスをMap

final Comparator<Order> sortByDateAsc = new Comparator<Order>() {
    private final Map<String, Date> map = new HashMap<>();

    @Override
    public int compare(Order o1, Order o2) {
        Date d1 = map.computeIfAbsent(o1.getOrderDate(), Date::new);
        Date d2 = map.computeIfAbsent(o2.getOrderDate(), Date::new);
        return d1.compareTo(d2);
    }
};

orders.sort(sortByDateAsc);

おすすめ

転載: http://10.200.1.11:23101/article/api/json?id=4166&siteId=1