개발/JAVA

구아바(Guava) Iterables.filter를 사용해서 리스트 필터링 하기

신매력 2016. 3. 25. 17:33

구글에서 제공하는 라이브러리인 구아바(Guava)를 사용하면 java의 Collection을 간편하게 활용할 수 있다.

 

이번 글에서 설명할 것은 리스트의 값을 특정 조건으로 필터링 하는 예제이다.

 

 

 

1. List에서 null값 모두 제거하기

 

List<User> users = Lists.newArrayList(Iterables.filter(users, Predicates.notNull()));

 

여러 메소드가 있으니 맨 안쪽부터 뜯어서 보자.

 

 

1-1

Iterables.filter(users, Predicates.notNull())

 

 

구글에서 제공하는 Iterables의 filter 메소드의 파라미터는 unfiltered, predicate 라고 나와있다. 

Iterables.filter(필터링할 리스트, 필터 조건)

 

역시 또 구글에서 제공하는 Predicates 클래스의 notNull메소드를 넣어주면,

리스트에서 null을 제거해준다.

 

1-2

List<User> users = Lists.newArrayList(필터링 된 결과);

 

리스트를 생성해주는 구글의 유틸클래스인 Lists를 이용해 

1-1에서 나온 필터링 된 결과를 리스트에 assign 해준다.

 

 

 

 

2. List에서 특정 조건인 값 필터링 하기

 

null 같이 간단한 조건 체크 말고, 객체의 값이 어떤 조건을 갖고 있는 경우를 필터링 하고 싶을 경우.

아래와 같이 Predicate의 apply메소드를 override를 하여 사용할 수 있다.

List<User> goldUsers = Lists.newArrayList(Iterables.filter(users, new Predicate<User>() {
	@Override
	public boolean apply(User user) {
		return user.getLevel().equals("gold");
	}
}));

 

첨에 딱 보면 복잡해보이지만 하나하나 뜯어보면 복잡하진 않다.

 

위에 설명한 1-1과 동일한 메소드이며,

두번째 파라미터인 Predicate 객체의 apply 메소드만 오버라이드 해주는 것이다.

 

위의 예제에서는 goldUsers에 gold 레벨을 갖고있는 유저리스트가 저장 되도록 했다.