Guava学习之Map

    xiaoxiao2025-04-02  12

    Guava 中文是石榴的意思,该项目是 Google 的一个开源项目,包含许多 Google 核心的 Java 常用库。

    目前主要包含:

    com.google.common.annotationscom.google.common.basecom.google.common.collectcom.google.common.iocom.google.common.netcom.google.common.primitivescom.google.common.util.concurrent 在线API doc:http://tool.oschina.net/apidocs/apidoc?api=guava

    现有如下Person类:

    public class Person { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public int getAge() { return age; } @Override public String toString() { return "Person{" + "name='" + name + '\'' + ", age=" + age + '}'; } }

    1 将List转化为Map

    1.1 转化后具有唯一Key

    public class TestMap { public static void main(String args[]) { List<Person> persons = Arrays.asList( new Person("zhang", 15), new Person("wang", 16), new Person("lee", 18) ); /** * 转换后的Map具有唯一键 */ Map<String, Person> map = Maps.uniqueIndex(persons, new Function<Person, String>() { @Override public String apply(Person person) { return person.getName(); } }); } }

    1.2 转化后的Key不唯一

    public class TestMap { public static void main(String args[]) { List<Person> persons = Lists.newArrayList( new Person("zhang", 15), new Person("zhang", 16), new Person("lee", 18) ); /** * 转换后的Map有重复键 */ Multimap<String, Person> multiMap = Multimaps.index(persons, new Function<Person, String>() { public String apply(Person person) { return person.getName(); } }); } }

    2 将Set转化为Map

    public class TestMap { public static void main(String args[]) { Set<Person> persons = Sets.newHashSet( new Person("zhang", 15), new Person("zhang", 16), new Person("lee", 18) ); /** * 以Set的值为Key,计算出一个Value */ Map<Person, String> map = Maps.asMap(persons, new Function<Person, String>() { public String apply(Person person) { return person.getName(); } }); } }

    3 转换Map的值

    public class TestMap { public static void main(String args[]) { List<Person> persons = Lists.newArrayList( new Person("zhang", 15), new Person("wang", 15), new Person("lee", 18) ); Map<String, Person> map = Maps.uniqueIndex(persons, new Function<Person, String>() { public String apply(Person person) { return person.getName(); } }); /** * 使用Key和Value作为输入,计算出一个新的Value */ Map<String, Integer> map2 = Maps.transformEntries(map, new Maps.EntryTransformer<String, Person, Integer>() { @Override public Integer transformEntry(String s, Person person) { return person.getAge(); } }); /** * 使用Function计算出一个新的Value */ Map<String, Double> map3 = Maps.transformValues(map, new Function<Person, Double>() { @Override public Double apply(Person person) { return (double)person.getAge(); } }); } }

    4 筛选Map中符合条件的映射

    public class TestMap { public static void main(String args[]) { List<Person> persons = Lists.newArrayList( new Person("zhang", 15), new Person("wang", 15), new Person("lee", 18) ); Map<String, Person> map = Maps.uniqueIndex(persons, new Function<Person, String>() { public String apply(Person person) { return person.getName(); } }); map = Maps.filterEntries(map, new Predicate<Map.Entry<String, Person>>() { @Override public boolean apply(Map.Entry<String, Person> stringPersonEntry) { return stringPersonEntry.getKey() != null && stringPersonEntry.getValue() != null; } }); map = Maps.filterKeys(map, new Predicate<String>() { @Override public boolean apply(String s) { return s != null && s.length() > 2; } }); map = Maps.filterValues(map, new Predicate<Person>() { @Override public boolean apply(Person person) { return person != null && person.getAge() > 15; } }); for (Map.Entry<String, Person> entry : map.entrySet()) { System.out.println(entry.getKey() + " " + entry.getValue()); } } }
    转载请注明原文地址: https://ju.6miu.com/read-1297661.html
    最新回复(0)