2014-06-12 4 views
1

목록이 있습니다. Arraylist<User>입니다. User 개체의 필드는 active입니다. 활성 필드가있는 목록의 모든 사용자 개체를 false으로 업데이트해야합니다.루프없이 목록의 모든 요소를 ​​업데이트하십시오.

목록을 반복하면서 필드 값을 업데이트 할 수 있습니다. 다른 방법이 있는지 알고 싶습니다. 어떤 개체 필드를 'false'로 업데이트 할 수 있습니까?

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

을 그렇지 않으면 당신은거야 : 자바 8을 사용하는 경우 다음과 같이, 당신은 Iterable<E>.forEach(Consumer<? super E> action) 방법을 사용할 수 있습니다

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

사용하고있는 자바의 어떤 버전 LambdaJ 유사한 라이브러리가이 같은 일을 할 수 있을까? – Edd

+0

기본 사항, 반복하지 않고 어떻게 내용에 액세스하고 업데이트 할 수 있습니까? –

+0

자바 8을 사용하고 있습니다. –

답변

5

자바 8의 당신은 스트림 API 및 람다를 사용할 수 있습니다

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

답변 해 주셔서 감사합니다. 내 생각에, 나는 이것으로 g 할 것이다. 이것은 for 루프의 형태이기도하지만, 이것은 for 루프를 줄입니다. 줄의. –

+0

@YaduKrishnan 줄 수를 줄이는 것에 대해 걱정할 필요는 없지만 코드를 가능한 한 이해하기 쉽도록 만드는 것이 더 중요합니다. 이 경우 람다 구문이이를 실현한다고 생각하지만, 일반적으로 뭔가를 표현하기 위해 더 많은 라인을 사용하는 것은 반드시 나쁜 것은 아닙니다. – Edd

+0

예, 제 경우에는 여러 목록에서이 작업을 수행해야합니다. 현재, 나는 4 개의리스트에서 비슷한 코드를해야만한다. 이 경우, 라인의 수가 대폭 증가합니다. –

0

Java8 및 c를 사용하지 않는 경우 사용 3 자 라이브러리는 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.위한 작업 같은 소리 자바 (8)를 사용하지 않는 경우

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

, 같은

관련 문제