1.Maps.uniqueIndex(Iterable, Function)
// nickname属性能唯一确定一个WebUser
ArrayList<WebUser> users = Lists.newArrayList(new WebUser(1,"one"),new WebUser(2,"two"),new WebUser(1,"three"),new WebUser(1,"four"));
// 得到以nickname为key,WebUser为值的一个map
ImmutableMap<String, WebUser> map = Maps.uniqueIndex(users,new com.google.common.base.Function<WebUser, String>() {
@Override
public String apply(WebUser user) {
return user.getNickname();
}
});
进一步简化:
ImmutableMap<String, WebUser> map = Maps.uniqueIndex(users,WebUser::getNickname);
总结,该方法只适用于key是唯一的,如果key不唯一,会报java.lang.IllegalArgumentException异常,可适用于校验key的唯一性,如果索引值不是独一无二的,可以使用Multimaps.index,会被覆盖;
2.Maps.difference
//两个map比较
Map<String, Integer> left = ImmutableMap.of("a", 1, "b", 2, "c", 3, "d", 4);
Map<String, Integer> right = ImmutableMap.of("c", 30, "d", 4, "e", 5, "f", 6);
MapDifference<String, Integer> diff = Maps.difference(left, right);
System.out.println(diff.entriesDiffering()); //返回键相同而值不同的两边的值 {c=(3, 30)}
System.out.println(diff.entriesInCommon()); //交集:键值都匹配 {d=4}
System.out.println(diff.entriesOnlyOnLeft()); //返回只存在于左边Map的项,匹配key {a=1, b=2}
System.out.println(diff.entriesOnlyOnRight()); //返回只存在于右边Map的项,匹配key {e=5, f=6}
System.out.println(diff.areEqual()); //两个map是否相等 false
3.Collections2集合(filter根据条件过滤,transform,直接转换)
private static void collections2() {
//集合数据过滤:apply方法等于true时返回
ImmutableList<String> list = ImmutableList.of("A", "B", "BC", "D", "AE");
Collection<String> collection1 = Collections2.filter(list, new Predicate<String>() {
public boolean apply(String input) {
return input.indexOf("A") >= 0;
};
});
System.out.println(collection1); //[A, AE]
//集合数据转换:
Collection<String> collection2 = Collections2.transform(list, new Function<String, String>() {
@Override
public String apply(String input) {
return input.toLowerCase();
}
});
System.out.println(collection2); //[a, b, bc, d, ae]
}
4.java8 list转map
实例1:返回Map<String,String>,可以为空,不会重复;
return dictionaryVos.stream().collect(Collectors.toMap(DictionaryVo::getParamName, DictionaryVo::getParamCode,
(oldValue,newValue) -> oldValue));
Map<String, AItem> map = items.stream().collect(Collectors.toMap(item -> item.getGoodsNo(), item -> item));
5.空的校验
Preconditions.checkArgument(StringUtils.isNotBlank(message),"序号为"+orderNo+"的名称填写不正确");
抛出IllegalArgumentException异常