Iterable<Person> adults = FluentIterable.from(ps).filter( new Predicate<Person>() { @Override public boolean apply(Person p) { return p.getAge() >= 18; // 年龄>18 } });
FluentIterable.from(ps).transform(new Function<Person, String>() { @Override public String apply(Person p) { return Joiner.on('#').join(p.getName(), p.getAge()); } });
ps = Lists.newArrayList( new Person("person1", 22), new Person("person2", 23), new Person("person3", 17) );
//[a, b, c, d, e] --> [[a, b], [c, d, e]] - List<List<Person>> subList = Lists.partition(ps, 2);
Set<String> s1 = Sets.newHashSet("1", "2", "3"); Set<String> s2 = Sets.newHashSet("2", "3", "4"); Sets.difference(s1, s2); //[1]
Set<String> s1 = Sets.newHashSet("1", "2", "3"); Set<String> s2 = Sets.newHashSet("3", "2", "4"); Sets.SetView<String> sv = Sets.intersection(s1, s2); // [2, 3]
Set<String> s1 = Sets.newHashSet("1", "2", "3"); Set<String> s2 = Sets.newHashSet("3", "2", "4"); Sets.SetView<String> sv = Sets.union(s1, s2); // [3, 2, 1 ,4]
//iterator各个元素作为Map.values, key为Function.apply返回值 Maps.uniqueIndex(ps.iterator(), new Function<Person, String>() { @Override public String apply(Person p) { return p.getName(); } });
Maps.asMap(ps, new Function<Person, String>() { @Override public String apply(Person p) { return p.getName(); } });
Maps.transformEntries(map, new Maps.EntryTransformer<String, Boolean, String>() { @Override public String transformEntry(String key, Boolean value) { return value ? "yes" : "no"; } }); 将Map<String, Boolean> --> Map<String, String>, 其他的还有Maps.transformValues转换值
ArrayListMultimap<String, String> multiMap = ArrayListMultimap.create(); multiMap.put("Foo", "1"); multiMap.put("Foo", "2"); multiMap.put("Foo", "3"); System.out.println(multiMap); // {Foo=[1,2,3]}当出现重复值时,依然会被添加,因为ArrayListMultiMap的value时一个ArrayList:
ArrayListMultimap<String, String> multiMap = ArrayListMultimap.create(); multiMap.put("Bar", "1"); multiMap.put("Bar", "2"); multiMap.put("Bar", "3"); multiMap.put("Bar", "3"); multiMap.put("Bar", "3"); System.out.println(multiMap); //{Bar=[1, 2, 3, 3, 3]},相同的value会重复,value内部是一个List
HashMultimap<String, String> multiMap = HashMultimap.create(); multiMap.put("Bar", "1"); multiMap.put("Bar", "2"); multiMap.put("Bar", "3"); multiMap.put("Bar", "3"); multiMap.put("Bar", "3"); System.out.println(multiMap); //{Bar=[3, 2, 1]}, 相同的value不会重复,value内部是一个Set
其他一些MultiMap:
LinkedHashMultimap //顺序的HashMultimap, 形如LinkedHashMap TreeMultimap //可排序的MultiMap, 形如TreeMap //一些不可变的map ImmutableListMultimap ImmutableMultimap ImmutableSetMultimap
BiMap<String,String> biMap = HashBiMap.create(); biMap.put("1","Tom"); biMap.put("2","Tom"); //抛出异常
BiMap<String, String> biMap = HashBiMap.create(); biMap.put("1", "Tom"); biMap.forcePut("2", "Tom"); System.out.println(biMap); //{2=Tom}
BiMap<String, String> biMap = HashBiMap.create(); biMap.put("1", "Tom"); biMap.put("2", "Harry"); BiMap<String, String> inverseMap = biMap.inverse(); System.out.println(biMap); //{2=Harry, 1=Tom} System.out.println(inverseMap); //{Harry=2, Tom=1
HashBasedTable<Integer, Integer, String> table = HashBasedTable.create(); table.put(1, 1, "Rook"); table.put(1, 2, "Knight"); table.put(1, 3, "Bishop"); System.out.println(table.contains(1, 1)); //true System.out.println(table.containsColumn(2)); //true System.out.println(table.containsRow(1)); //true System.out.println(table.containsValue("Rook")); //true System.out.println(table.remove(1, 3)); //Bishop System.out.println(table.get(3, 4)); //null
Map<Integer,String> columnMap = table.column(1); Map<Integer,String> rowMap = table.row(2);
ArrayTable //二维数组实现 ImmutableTable //不可变table,创建后不能改变 TreeBasedTable //对行列排序的table
Range<Integer> numberRange = Range.closed(1, 10); //包括首尾 System.out.println(numberRange.contains(10)); //true System.out.println(numberRange.contains(1)); //true Range<Integer> numberRange1 = Range.open(1,10); //除去首尾 System.out.println(numberRange1.contains(10)); //false System.out.println(numberRange1.contains(1)); //false
Range<Integer> ageRange = Range.closed(35, 50); //Person到age转换的function Function<Person, Integer> ageFunction = new Function<Person, Integer>() { @Override public Integer apply(Person person) { return person.getAge(); } }; //这样得到年龄再[35, 50]之间的人 Predicate<Person> predicate = Predicates.compose(ageRange,ageFunction);
MultiMap<Integer,String> map = new ImmutableListMultimap.Builder<Integer,String>() .put(1,"Foo").putAll(2,"Foo","Bar","Baz") .putAll(4,"Huey","Duey","Luey") .put(3,"Single").build();
/** * 城市人口比较器 */ public class CityByPopluation implements Comparator<City> { @Override public int compare(City city1, City city2) { return Ints.compare(city1.getPopulation(), city2.getPopulation()); } }
Ordering.from(cityByPopluation).reverse();
Ordering.from(comparator).nullsFirst();//null值最小放在前面
/** * 雨量比较器 */ public class CityByRainfall implements Comparator<City> { @Override public int compare(City city1, City city2) { return Doubles.compare(city1.getAverageRainfall(), city2.getAverageRainfall()); } }
Ordering<City> secondaryOrdering = Ordering.from(cityByPopulation).compound(cityByRainfall);//组合比较器 Collections.sort(cities,secondaryOrdering); //排序
Ordering<City> ordering = Ordering.from(cityByPopluation); List<City> topFive = ordering.greatestOf(cityList,5); //前5个 List<City> bottomThree = ordering.leastOf(cityList,3); //最后3个看来Guava在集合方面还是很给力的。
不吝指正。