2016-08-13 21 views
-1

私は約10.000のオブジェクトを持つarraylistを持っています。このオブジェクトのそれぞれは、以下の特性を持っている(といくつかのより多くのではなく、重要):javaのarraylistから最新の日付プロパティを持つオブジェクトを除くすべてを削除します

ホスト名(文字列) Lastseen(日)

このArrayListのは、最終的なリストに濾過する必要があります。

arraylistは、同じホスト名を持つ複数のオブジェクトを持つことができます。ホスト名が同じであれば、最新のLastseen日付を持つ最終リストのオブジェクトのみが必要です。

ホスト名のオカレンスが1つしかない場合は、最後の日付が何であっても最終リストに含める必要があります。

編集:申し訳ありませんが、コードを提供していないため、

+1

[あなたのコードはどこですか?](http://stackoverflow.com/help/mcve) – Reimeus

+0

リストを 'lastseen(date)'でソートし、最後のエントリを除くすべてを削除します。 –

+0

'Map 'を使うと簡単に行えます。 – Andreas

答えて

1

は、Java 8を使用すると仮定すると、以下のコメントを参照してください、それがこのような何かを行うことができます。

List<MyClass> result = list.stream().collect(
    Collectors.groupingBy(
     MyClass::getHostName, 
     Collectors.toCollection(
      () -> new TreeSet<>((a, b) -> a.getLastSeen().compareTo(b.getLastSeen())) 
     ) 
    ) 
).values().stream().map(TreeSet::last).collect(Collectors.toList()); 

これは、最初のグループにホスト名での値と同じホスト名を持つMyClassのインスタンスをTreeSetに収集し、各ホスト名に対して最新の日付のインスタンスのみを保持します。

+0

私は驚いています、これは私が必要としたものです。最初はエラーが出ましたが、それはホスト名が空の場合があったため、ホスト名のない項目を削除するフィルタを追加したためです(別のstackoverflowの質問から学んだことです)。どうもありがとう!私の次のステップは、コードが正確に何をしているのかを理解しようとしているので、次回は別の機会にそれを使うことができます。 – user643317

+0

あなたのコメントをお寄せいただきありがとうございますが、私はまずストリーム()とコレクト()が正確に何であるかを学ぶ必要があると思います。 –

+0

そうです。 – user643317

関連する問題