2017-07-18 18 views
0

特定のフィルタのリストからオブジェクトを削除したいが、複数のオブジェクトがある。ラムダforeach式のインデックスを取得するjava 8

list.stream().filter(g->g.getName().equalsIgnoreCase("String")).forEach(result ->{ 

      /* is it possible to get the index of the result here? 
      .remove(), will iterate through the list again. I don't want that. 
      */ 

      list.remove(result); 
}); 
+2

これは実際に実行可能なアプローチではありません。より良いアプローチは、除外したくない要素で新しいリストを収集することです。 –

+0

はい、意味があります。ありがとう。結果を1つのオブジェクトにマージし、以前のオブジェクトを削除する必要があります。どうやってやるの?それは私の究極の目標です –

+0

@AnkurSehdevリストから削除する前にマージする必要がある場合は、あなたの質問に答えを指定して、回答があなたに役立つようにしてください。この合併が何であるかについても教えてください。 –

答えて

4

あなたは、たとえば、代わりにCollection#removeIfを使用することができます

list.removeIf(g -> g.getName().equalsIgnoreCase("String")); 
+0

はい、意味があります。ありがとう。結果を1つのオブジェクトにマージし、以前のオブジェクトを削除する必要があります。どうやってやるの?それは私の究極の目標です –

+0

@AnkurSehdevこんにちは、私は英語が上手ではありません。 Holger、ありがとう。 –

+0

もちろん、ありがとうございました。 –

7

は、この時点でインデックスを取得する方法はありませんが、あなたはオーバーストリーミングしているlistを修正し、とにかくサポートされていません。試してみるとConcurrentModificationExceptionになる可能性があります。

は、この操作のために専用のAPIを使用してください:

list.removeIf(g -> g.getName().equalsIgnoreCase("String")); 

代替は、あなたが新しいListに残しておきたい要素を収集することになります。

List<String> result = list.stream() 
    .filter(g -> !g.getName().equalsIgnoreCase("String")) 
    .collect(Collectors.toList()); 
+0

ありがとうございます。しかし、結果を1つのオブジェクトにマージして、前のオブジェクトを削除する必要があります。どうやってやるの?それは私の究極の目標です –

+0

@AnkurSehdevこんにちは、私は英語が上手ではありません。削除されたアイテムを別のリストにマージするという意味ですか? –

+0

私はこのリストにJSONオブジェクトを持っています。 2つのオブジェクトを結合して新しいオブジェクトに結合したい。同じリストから元のものを削除します。 –

0

申し訳ありませんが、あなたのために助けることができない場合

list.stream().filter(g->g.getName().equalsIgnoreCase("String")).forEach(result ->{ 
list.indexOf(result); 
}); 
+0

私はこの質問を間違って理解するかもしれません:) –

関連する問題