2014-06-12 5 views
1

У меня есть список, Arraylist<User>. Объект User имеет поле active. Мне нужно обновить все пользовательские объекты списка с активным полем как false.Обновить все элементы списка без цикла

Итерации по списку, я могу обновить значение поля. Я хочу знать, есть ли другой способ, с помощью которого я могу обновить все активные поля объектов до «false»?

+0

Какую версию Java вы используете? – Edd

+0

Основная вещь, без повторения, как вы можете получить доступ и обновить ее содержимое? –

+0

Я использую java 8 –

ответ

5

Для Java 8 вы можете использовать потоковый API и лямбды

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

Спасибо за ответ. Думаю, я это сделаю. Это также форма цикла, но это уменьшает число. линий. –

+0

@YaduKrishnan Я бы не стал беспокоиться о сокращении числа строк, я был бы больше заинтересован в том, чтобы сделать код максимально понятным. В этом случае я думаю, что синтаксис лямбда достигает этого, но я хочу сказать, что в целом использование большего количества строк для выражения чего-то не обязательно является плохим. – Edd

+0

Да, но в моем случае я должен сделать это в нескольких списках. В настоящее время я должен сделать аналогичный код в 4 списках. В этом случае число строк резко возрастает. –

0

Если вы используете Java 8, вы можете использовать метод Iterable<E>.forEach(Consumer<? super E> action) следующим образом:

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

В противном случае вы будете необходимо использовать стандартный подход с расширенным циклом:

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

Если вы не используете Java8 и c частное использование третьих сторон библиотеки, посмотрите на функцию Collection2.transform() в библиотеке Google Guava

Ниже приведен пример:

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

Смежные вопросы