我有一個列表,Arraylist<User>
。用戶對象的字段爲active
。我需要將活動字段的所有用戶對象更新爲false
。更新無循環列表中的所有元素
遍歷列表,我可以更新字段值。我想知道是否有其他方法,使用它我可以將所有活動字段更新爲'false'?
我有一個列表,Arraylist<User>
。用戶對象的字段爲active
。我需要將活動字段的所有用戶對象更新爲false
。更新無循環列表中的所有元素
遍歷列表,我可以更新字段值。我想知道是否有其他方法,使用它我可以將所有活動字段更新爲'false'?
對於Java 8,你可以使用流API和lambda表達式
List<User> users;
users.forEach((u) -> u.setActive(false));
感謝您的答案。我想,我會用這個。這也是for循環的一種形式,但是這會減少no。線。 –
@YaduKrishnan我不擔心減少行數,我更關心使代碼儘可能容易理解。在這種情況下,我認爲lambda語法實現了這一點,但我的觀點是,一般來說,使用更多的線條來表達一些東西並不一定是壞事。 – Edd
是的,但在我的情況下,我必須在多個列表中執行此操作。目前,我必須在4個列表中做類似的代碼。在這種情況下,線數急劇增加。 –
如果您使用的是Java 8中,您可以使用Iterable<E>.forEach(Consumer<? super E> action)
方法如下:
users.forEach((user) -> user.setActive(false));
否則會必須使用標準的enhanced-for循環方法:
for (User user : users) {
user.setActive(false);
}
如果您不使用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]
}
這聽起來像函數式編程和Java 8.你一份工作可以做這樣的事情:
users.forEach(user -> user.setActive(false))
如果不使用Java 8,也有類似的庫如LambdaJ您正在使用什麼版本的Java
? – Edd
基本的東西,沒有迭代你如何訪問和更新它的內容? –
我正在使用java 8 –