2014-06-12 61 views
1

我有一個列表,Arraylist<User>。用戶對象的字段爲active。我需要將活動字段的所有用戶對象更新爲false更新無循環列表中的所有元素

遍歷列表,我可以更新字段值。我想知道是否有其他方法,使用它我可以將所有活動字段更新爲'false'?

+0

? – Edd

+0

基本的東西,沒有迭代你如何訪問和更新它的內容? –

+0

我正在使用java 8 –

回答

5

對於Java 8,你可以使用流API和lambda表達式

List<User> users; 
users.forEach((u) -> u.setActive(false)); 
+0

感謝您的答案。我想,我會用這個。這也是for循環的一種形式,但是這會減少no。線。 –

+0

@YaduKrishnan我不擔心減少行數,我更關心使代碼儘可能容易理解。在這種情況下,我認爲lambda語法實現了這一點,但我的觀點是,一般來說,使用更多的線條來表達一些東西並不一定是壞事。 – Edd

+0

是的,但在我的情況下,我必須在多個列表中執行此操作。目前,我必須在4個列表中做類似的代碼。在這種情況下,線數急劇增加。 –

0

如果您使用的是Java 8中,您可以使用Iterable<E>.forEach(Consumer<? super E> action)方法如下:

users.forEach((user) -> user.setActive(false)); 

否則會必須使用標準的enhanced-for循環方法:

for (User user : users) { 
    user.setActive(false); 
} 
0

如果您不使用Java8,並且c一個使用第三方庫,在庫Google Guava

下面就來看看在Collection2.transform()函數是一個例子:

public class Main { 

    public static void main(String[] args) throws Exception { 

     List<Boolean> myList = new ArrayList<Boolean>(); 
     myList.add(true); 
     myList.add(true); 
     myList.add(true); 
     myList.add(true); 
     myList.add(true); 

     System.out.println(Collections2.transform(myList, new Function<Boolean, Boolean>() { 
      @Override 
      public Boolean apply(Boolean input) { 
       return Boolean.FALSE; 
      } 
     })); 
    }//outputs [false, false, false, false, false] 
} 
0

這聽起來像函數式編程和Java 8.你一份工作可以做這樣的事情:

users.forEach(user -> user.setActive(false)) 

如果不使用Java 8,也有類似的庫如LambdaJ您正在使用什麼版本的Java