개발/JAVA

구아바(Guava)를 이용하여 List의 특정값 추출해서 새로운 List 만들기

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

구글의 구아바(Guava)를 이용하면 Collection을 간편하게 처리할 수 있다.

 

앞에 글에서는 리스트에 있는 값을 특정 Precate로 필터링 하는 법을 설명했는데,

이번에는 필터링이라기 보다는, 어떤 리스트를 어떤 새로운 객체의 리스트로 변환한다고나 할까?

 

 

1. List에 들어있는 어떤 값을 추출해서 새로운 List로 만들기

 

아래는 List<User> 리스트를 

유저의 숫자 아이디만 뽑아서 List<Integer>로 만드는 예제이다.

 

List<User> users = ...
List<Integer> userIds = Lists.transform(users, new Function<User, Integer>() {
	@Override
	public Integer apply(User user) {
		return user.getUserId();
	}
});

 

이 기능의 핵심 메소드는 바로 구글이 지원하는 Lists객체의 transform 메소드이다.

이름이 transform인 것 처럼, 리스트를 어떤 기능을 통해 새로운 리스트를 만든다.

 

□ (원래의 리스트) -> ● (Function) -> ■ (새로운 리스트 결과)

 

 

Function의 제네릭 안의 값이 의미하는 바는 아래와 같다.

Function<원래의 리스트새로운 리스트 결과>

 

 

Predicate처럼 transform 메소드의 apply 메소드를 오버라이드 하여

필요한 조건을 구현하고 리턴시키면, 원하는 리스트의 결과가 나오게 된다.

 

 

 

2. List에 들어있는 어떤 값을 이용해서 새로운 객체의 List로 만들기

 

List<UserView> usersView = Lists.transform(users, new Function<User, UserView>() {
	@Override
	public UserView apply(User user) {
		return new UserView(user);
	}
}));

 

List<User> users 리스트를 UserView같은 데코레이션 용 객체로 변환할 때도 유용하게 사용할 수 있다.

사용자가 Function을 구현하기 나름이다.