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異常