구글의 구아바(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을 구현하기 나름이다.
'개발 > JAVA' 카테고리의 다른 글
trim()으로 걸러내지 못하는 공백문자 정규식으로 걸러내기 (0) | 2016.07.22 |
---|---|
Java의 Integer, int 숫자 비교의 주의사항 (3) | 2016.03.30 |
구아바(Guava) Iterables.filter를 사용해서 리스트 필터링 하기 (0) | 2016.03.25 |
server to server에서 DATE 전송. jsp에서 포멧에 맞춰 출력하기. (0) | 2014.10.15 |
[jUnit] class not found 에러 (0) | 2014.05.15 |