私が読んでいるいくつかのコンセプトを組み合わせなければならないと思っている問題がありますが、それらを組み合わせる方法を見つけることができないか、または最も効率的なものを見つけることができません。ここに私の状況があります:オブジェクトのリストを反復処理し、フィールドを変換し、比較し、そのフィールドでソートする方法は?
私はマイクロサービスで作業しています。これは、これが非常に特殊な理由です。基本的に、別のサービスからボリュームオブジェクトのリストを取得しています。ボリュームオブジェクトには、String型、String型の日付(実際には "HH:mm"の形式で時刻を表し、命名規則にデータモデラーを責める)、およびint closeという3つのフィールドがあります。
私がやっていることは、オブジェクトのリストを取得して日付(時間)でソートし、同じ日付(時間)を含むオブジェクトの新しいリストを作成し、それに基づいて異なるフィールド値を持つことです私がやっている計算の時間でソートするには、時間フィールドをDateオブジェクトに変換して比較する必要があると思います。私はオブジェクトを反復処理し、変換されたフィールドを比較する方法を苦労しています。私が感じるものは、正しい道に私を置いた:How to sort a List<Object> alphabetically using Object name field
しかし、私はそれを働かせるように見えることはできません。
volumeResources.sort(volumeResources, new Comparator<VolumeResource>(){
@Override
public int compare(VolumeResource v1, VolumeResource v2) {
SimpleDateFormat format = new SimpleDateFormat("HH:mm");
try {
Date d1 = format.parse(v1.getDate());
Date d2 = format.parse(v2.getDate());
} catch (ParseException e) {
log.error("Error in parsing string to date. ", e);
}
return d1.compareTo(d2);
}
});
今すぐ右のバット、私はVolumeResourcesのv1とv2を比較し始めたが、代わりに最後に日付を比較してみましたので、これは正しくないでなければならないことを知っている:ここに私のコードです。上記のreturn文の代わりに、私はまた、以下のいずれかを試してみましたが、それは実際にDateオブジェクトにフォーマットされたオブジェクトを設定していないので、私はそれが常に動作するとは思わない:
return format.parse(v1.getDate()).compareTo(format.parse(v2.getDate()));
だからそれはどこだI失われた。これは擬似コードで説明するとかなり簡単な必要性のように思えますが、機能的に機能させる方法を理解できないようです。私がこれから簡単に必要とする他のフィールドを埋める方法があれば、ボーナスポイント。ラムダを使用するか、これを効率的にするための二重のボーナスポイント。
ありがとうございました。
_exactly_はあなたの問題ですか?あなたのプログラムはどのように期待どおりに実行されませんか? – Marvin
それはコンパイルさえしますか? – assylias
@Marvinこの主な問題は、オブジェクトのリストを時間文字列でソートする方法を理解しようとしています。 – Crislips