2017-04-06 50 views
-1
HashMap<Integer, ArrayList<Integer>> cityMap = new HashMap<>(); 
...  
for (ArrayList<Integer> list : cityMap.values()) { 
    int size = list.size(); 
    if (size > 0) { 
     list.removeIf(i -> true); 
    } 
} 

我不太明白removeIf在這種情況下做了什麼。特別是部分(我 - >真)。謝謝你的任何解釋。Java - removeIf example

+1

.values()是一組名單,如果其中任何一個在他們的項目,整個列表被刪除。 '我 - >真'只意味着「永遠刪除」。 –

+0

https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html#removeIf-java.util.function.Predicate- –

+0

在這種情況下,這是一種非常複雜且低效的方式說'list.clear()'。同樣,'int size = list.size();如果(size> 0)...'是詳細說出if(!list.isEmpty())...'的方式。由於'ArrayList'總是可變的,並且清除已經是空的列表沒有任何作用,所以測試並不是必須的。你可以使用'for(ArrayList list:cityMap.values())list.clear();'代替。或者,如果您想引入lambda表達式:'cityMap.values()。forEach(list - > list.clear());'或方法引用:'cityMap.values()。forEach(List :: clear) ;'。所有這些變體都是一樣的。 – Holger

回答

0

removeIf將遍歷列表中的每個元素並在其上運行指定的謂詞(布爾函數)。如果謂詞返回true,它將從列表中刪除。如果謂詞返回false,則不會。

就你而言,每個元素都將導致謂詞返回true,從而清除列表。

1

removeIf()狀態的Javadoc:

移除此collection滿足給定謂詞的元素。

在您的示例中的謂詞總是true因爲你在你的名單中表達地圖中的每個整數itruei -> true

我添加了一個簡單的例子刪除所有偶數和謂詞i % 2 == 0保留所有奇數:

醜女設置:

List<List<Integer>> lists = new ArrayList<List<Integer>>() {{ 
    add(new ArrayList<>(Arrays.asList(1,2,3,4))); 
    add(new ArrayList<>(Arrays.asList(2,4,6,8))); 
    add(new ArrayList<>(Arrays.asList(1,3,5,7))); 
}}; 

只保留奇數:

for (List<Integer> list : lists) { 
    list.removeIf(i -> i % 2 == 0); 
    System.out.println(list); 
} 

O本安輸出:

[1, 3] 
[] 
[1, 3, 5, 7]