2016-11-17 81 views
0

我在我的android應用程序中有一個位置列表。我試圖從list中刪除一個位置,其中位置ID等於某個值。Android Java從列表中刪除項目,篩選器列表

這是我的位置類:

public class Location{ 
    Private int locationId; 
    Private String locationName; 
} 

那麼,有沒有辦法從List<Location>刪除的位置,而無需使用forwhile loop。像一個lambda表達C#

var filteredLocations = locations.Where(x=>x.LocationId!=3).ToList(); 
+0

在適配器內部,您可以使用下面的函數製作一個方法mList.remove(index); notifyItemRemoved(index); –

+0

你是否被綁定到列表?在這種情況下Map 會更好 –

+2

由於Android不支持Java 8,因此您無法訪問大多數面向lambda的API。 lambda的有限支持由第三方lib retrolambda提供。在你的情況下,你可以切換到一個地圖或一個SparseArray或與一個好的舊的去。 –

回答

1

您可以通過使用適配器

//you can use addItem all for adding data in array 
    public void addItem(ClassName item) { 
      mList.add(item); 
      notifyItemInserted(mList.size() - 1); 
     } 

//delete all for deleting the whole list of data 
     public void deleteAll() { 
      mList.clear(); 
      notifyDataSetChanged(); 
     } 

//For deleting a perticular item from data 
     public void deleteItem(int index) { 
      mList.remove(index); 
      notifyItemRemoved(index); 

     } 

//For adding the whole set of array 
     public void addAllItems(List<ClassName> items) { 
      mList.addAll(items); 
      notifyDataSetChanged(); 
     } 

//For Updating a single item 
     public void updateItem(int index, ClassName item) { 
      mList.set(index, item); 
      notifyItemChanged(index); 
     } 

哪裏mList是數組列表

public List<ClassName> mList = new ArrayList<>(); 
1

有在ArrayList的方法直接刪除一個對象。

public boolean remove(Object o) 

您將不得不重寫equals方法以使其工作。在內部,它仍然會遍歷所有的對象,直到找到需要的對象。

這裏是該方法的link

1

根據this答案您可以看到lambda表達式存在於Java 8中。從答案

代碼片段:

final Array<Integer> a = array(1, 2, 3); 
final Array<Integer> b = a.map({int i => i + 42}); 
arrayShow(intShow).println(b); // {43,44,45} 

Android並不能支持所有Java 8功能,但是lambda表達式支載,你可以在documentation看到。

0

你可以試試這個下面的方法添加使用任何迴路用了數組列表。

ArrayList<Location> arrayList = new ArrayList<>(list.size()); 
arrayList.addAll(list); 
arrayList.remove(index) OR arrayList.remove(object)