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);