在java平常開發中,常常須要使用各類數據結構,在涉及到數據結構之間如何優雅的轉換時,咱們能夠藉助google的guava提供的相關功能來優雅的實現。如下記錄一些開發中常常須要使用數據結構的變形,以便使用時方便查閱。 通常咱們的數據結構中存儲的爲對象,如下舉例先構造一個類,用來存放中不一樣的數據結構中。java
class Person { public String name; public int age; Person(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return MoreObjects.toStringHelper(this).omitNullValues() .add("name", name) .add("age", age) .toString(); } }
提供一個方法來構造一個對象list數據結構
public static Collection<Person> queryPersion(){ return Lists.newArrayList( new Person("kang",30), new Person("liu",25), new Person("han",22) ); } //某個屬性爲null public static List<Person> queryPersion2(){ return Lists.newArrayList( new Person("kang",30), new Person("liu",25), new Person("han",22), new Person(null,24) ); }
List<Person> persons = queryPersion(); List<String> peopleNames = Lists.transform(persons, new Function<Person, String>() { @Override public String apply(Person person) { return person.getName(); } });
Collection<Person> matchingPersons = queryPersion2(); Collection<String> peopleNames = Lists.newArrayList( Iterables.filter( Iterables.transform(matchingPersons, new Function<Person, String>() { @Override public String apply(Person from) { return from.getName(); } }), Predicates.notNull() ) );
Collection<Person> persons = queryPersion(); List<Person> oldPeople = Lists.newArrayList(Iterables.filter(persons, new Predicate<Person>() { public boolean apply(Person person) { return person.getAge() >= 25; } }));
//name重複或者name爲null時會報錯 Collection<Person> yourList = queryPersion(); Map<String,Person> mappeds = Maps.uniqueIndex(yourList, new Function<Person,String>() { @Nullable public String apply(Person from) { // do stuff here return from.getName(); }});
Collection<Person> yourList = queryPersion(); ImmutableListMultimap<String, Person> mapping = Multimaps.index(yourList, new Function<Person,String>() { public String apply(Person input) { return input.getName(); } });
Lists.newArrayListWithExpectedSize(size);