Guava에서 자주 사용하는 Maps api
http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/collect/Maps.html
Map을 생성/변환한다. TreeMap을 생성할 경우 Comparator나 SortedMap을 인자로 받을 수 있다.
Maps.newLinkedHashMap();
Maps.newTreeMap();
Maps.newTreeMap(Collections.reverseOrder());
Maps.newTreeMap(String.CASE_INSENSITIVE_ORDER)
Maps.newHashMapWithExpectedSize(2);
Maps.newConcurrentMap();
Maps.filter*() 또는 Maps.uniqueIndex() 는 함수(function) 메소드를 사용해서 map의 submap을 얻어올 수 있으며,
properties에서 바로 map으로 읽어오는 Maps.fromProperties()도 있다.
import java.util.List;
import java.util.Map;
import java.util.Properties;
import org.apache.commons.collections.MapUtils;
import org.junit.Test;
import com.google.common.base.Function;
import com.google.common.base.Predicate;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
public class MapsTest {
@Test
public void test() {
class Member {
int id;
String name;
String phone;
public Member(int id, String name, String phone) {
this.id = id;
this.name = name;
this.phone = phone;
}
@Override
public String toString() {
return com.google.common.base.Objects.toStringHelper(this).add("id", id).add("name", name).add("phone", phone).toString();
}
}
List<Member> members = Lists.newArrayList();
members.add(new Member(3, "Kaley", "222"));
members.add(new Member(4, "Yong", "333"));
members.add(new Member(1, "Samuel", "000"));
members.add(new Member(0, "Jason", "111"));
Map<Integer, Member> memberById = Maps.uniqueIndex(members, new Function<Member, Integer>() {
@Override
public Integer apply(Member member) {
return member.id;
}
});
MapUtils.debugPrint(System.out, "member by id ", memberById);
// filterKey, filterValue도 비슷한 형태
Map<Integer, Member> filteredMemberById = Maps.filterEntries(memberById, new Predicate<Map.Entry<Integer, Member>>() {
@Override
public boolean apply(Map.Entry<Integer, Member> input) {
return input.getValue().name.contains("Yong");
}
});
MapUtils.debugPrint(System.out, "filted member by id ", filteredMemberById);
}
@Test
public void mapsPropertiesTest() {
Properties properties = new Properties();
properties.put("replicated.cache.url", "redis://1.1.1.2/0");
properties.put("origin.cache.url", "redis://1.1.1.1/0");
Map<String, String> maps = Maps.fromProperties(properties);
MapUtils.debugPrint(System.out, "map from properties", maps);
}
}
결과
map from properties =
{
replicated.cache.url = redis://1.1.1.2/0 java.lang.String
origin.cache.url = redis://1.1.1.1/0 java.lang.String
} com.google.common.collect.RegularImmutableMap
member by id =
{
3 = Member{id=3, name=Kaley, phone=222} com.google.tag.location.MapsTest$1Member
4 = Member{id=4, name=Yong, phone=333} com.google.tag.location.MapsTest$1Member
1 = Member{id=1, name=Samuel, phone=000} com.google.tag.location.MapsTest$1Member
0 = Member{id=0, name=Jason, phone=111} com.google.tag.location.MapsTest$1Member
} com.google.common.collect.RegularImmutableMap
filted member by id =
{
4 = Member{id=4, name=Yong, phone=333} com.google.tag.location.MapsTest$1Member
} com.google.common.collect.Maps$FilteredEntryMap
Maps.filterValues()도 쓰인다. null이 아닌 것만 저장하고 싶을 때, Predicate 클래스를 활용하여 사용할 수 있다.
@Override
public boolean apply(Object object) {
return object != null;
}
'general java' 카테고리의 다른 글
[Guava] Iterables.transform 과 removeIf 예제 (0) | 2015.04.10 |
---|---|
[Guava] Joiner와 Splitter 예제 (0) | 2015.04.09 |
[Guava] 자주 사용하는 Sets api (0) | 2015.04.09 |
[Guava] comparator를 여러 번 이용해서 Object 소팅하기 (0) | 2015.04.08 |
[eclipse] tab 또는 빈 공백 없애기 (0) | 2015.04.03 |