更新列表的所有元素而不循环

时间:2014-06-12 09:50:26

标签: java collections arraylist

我有一个列表,Arraylist<User>。 User对象具有字段active。我需要使用活动字段false更新列表的所有用户对象。

通过列表迭代,我可以更新字段值。我想知道是否有其他方法,使用哪种方法我可以将所有对象活动字段更新为'false'?

4 个答案:

答案 0 :(得分:9)

对于java 8,您可以使用流API和lambdas

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

答案 1 :(得分:1)

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

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

否则你将不得不使用标准的增强型for循环方法:

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

答案 2 :(得分:0)

如果您没有使用Java8,并且可以使用第三方库,请查看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]
}

答案 3 :(得分:0)

这听起来像是函数式编程和Java 8的工作。你可以这样做:

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

如果您不使用Java 8,则会有类似的库,例如LambdaJ