2017-07-18 1055 views
0

我想從某個過濾器的列表中刪除對象,並且存在多個對象。獲取lambda 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

是的,有道理。謝謝。但我需要將結果合併到一個對象中,然後刪除以前的對象。我怎樣才能做到這一點?這是我的最終目標 –

+0

@AnkurSehdev如果您需要合併,然後再從列表中刪除,請在您的問題中指定,以便答案可以對您有所幫助。請同時告訴我們這個合併是什麼,等等。 –

回答

4

您可以使用Collection#removeIf代替,例如:

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

是的,有道理。謝謝。但我需要將結果合併到一個對象中,然後刪除以前的對象。我怎樣才能做到這一點?這是我的最終目標 –

+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

謝謝,但我需要將結果合併到一個對象中,然後刪除以前的對象。我怎樣才能做到這一點?這是我的最終目標 –

+0

@AnkurSehdev嗨,我不擅長英語。你的意思是將刪除的項目合併到另一個列表中? –

+0

我在這個列表中有JSON對象。我想將兩個對象合併或組合成一個新對象。並從同一個列表中刪除原始的。 –

0

很抱歉,如果不能幫助你

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

可能是我錯了解了這個問題:) –