1.
新单词:
- Interchangeable 可交换的
- Intersection 交集
- Difference 差集
- Union 并集
- Distinct 不同的
- Inverse 反转,相反
2. Collections2中的两个重要方法:
1)Collections2.filter()过滤器:
// 寻找palindrome(回文):从前往后和从后往前读出结果相同
public static void main(String[] args) {
Set<String> set = Sets.newHashSet("refer", "mom", "father", "dad");
Collection<String> palinSet = Collections2.filter(set,
new Predicate<String>() {
@Override
public boolean apply(String input) {
// TODO Auto-generated method stub
return new StringBuilder(input).reverse().toString()
.equals(input);//输入输出相同
}
});
Iterator<String> i = palinSet.iterator();
while (i.hasNext()) {
System.out.println(i.next());
}
}
2) Collectoins2.transform()转换器
// 把长整形时间换成字符串形式
public static void main(String[] args) {
Set<Long> setTime = new HashSet<Long>();
setTime.add(12312431533L);
setTime.add(32342534546L);
setTime.add(123456789L);
Collection<String> strTime = Collections2.transform(setTime,
new Function<Long, String>() {
@Override
public String apply(Long input) {
return new SimpleDateFormat("yyyy-MM-dd hh-mm-ss")
.format(input);
}
});
for (String str : strTime) {
System.out.println(str);
}
}
3. 断言:Predicate
条件:Function
1)组合式编程Functions.compose(f1,f2)//先f2后f1
public static void main(String[] args) {
List<String> list = Lists.newArrayList("I", "love", "programming",
"forever");
// 把长度大于5的单词截取前五位,如forever-->forev
Function<String, String> f1 = new Function<String, String>() {
@Override
public String apply(String input) {
return input.length() > 5 ? input.substring(0, 5) : input;
}
};
// 把长度为5的字符串变成大写,如:forev->FOREV
Function<String, String> f2 = new Function<String, String>() {
@Override
public String apply(String input) {
return 5 == input.length() ? input.toUpperCase() : input;
}
};
// 先计算f1规则,再计算f2规则
Function<String, String> f = Functions.compose(f2, f1);
Collection<String> resultf = Collections2.transform(list, f);
for (String str : resultf) {
System.out.println(str);
}
}
4. 1)Sets.intersection()交集
2)Sets.difference()差集
3)Sets.union()并集
上面三个方法的返回值为SetView类型
public static void main(String[] args) {
Set<Integer> set1 = Sets.newHashSet(1, 2, 3, 4);
Set<Integer> set2 = Sets.newHashSet(3, 4, 5, 6);
// 交集
SetView<Integer> intersection = Sets.intersection(set1, set2);
for (Integer i : intersection) {
System.out.print(i + "\t");
}
System.out.println();
// 差集
SetView<Integer> diff = Sets.difference(set1, set2);
for (Integer i : diff) {
System.out.print(i + "\t");
}
System.out.println();
// 并集
SetView<Integer> union = Sets.union(set1, set2);
for (Integer i : union) {
System.out.print(i + "\t");
}
}
5. Multiset 值可以相同
// 单词个数的统计
public static void main(String[] args) {
String str = "I love programming I decide programming everday";
// 分割字符串
String[] strArray = str.split(" ");
// 存放
Multiset<String> set = HashMultiset.create();
for (String strTemp : strArray) {
set.add(strTemp);
}
// 读取
Set<String> letters = set.elementSet();
for (String temp : letters) {
System.out.println(temp + "--->" + set.count(temp));
}
}
/*
output:
love--->1
decide--->1
programming--->2
I--->2
everday--->1
*/
Multimap key可以相同
总结一下Set、Map的遍历方法
// 注意一下map的两种遍历方法
public static void main(String[] args) {
Map<String, String> map = new HashMap<String, String>();
map.put("Java编程思想", "高淇");
map.put("C语言", "胖子");
map.put("数据库", "高淇");
map.put("操作系统", "刘琦");
map.put("计算机网络", "贾慧娟");
// 用Multimap存储
Multimap<String, String> teachers = ArrayListMultimap.create();
/*
* Iterator<Map.Entry<String, String>> iter = map.entrySet().iterator();
* while(iter.hasNext()){ Map.Entry<String, String> entry = iter.next();
* String key = entry.getKey(); String value = entry.getValue();
*
* teachers.put(value, key); }
*/
Iterator<String> iter = map.keySet().iterator();
while (iter.hasNext()) {
String key = iter.next();
String value = map.get(key);
teachers.put(value, key);//键与值交换
}
// 查看Multimap
Set<String> keys = teachers.keySet();
for (String str : keys) {
Collection<String> col = teachers.get(str);
System.out.println(str + "--->" + col);
}
}
/*
output:
胖子--->[C语言]
高淇--->[Java编程思想, 数据库]
刘琦--->[操作系统]
贾慧娟--->[计算机网络]
*/
上面两种常用来统计
6. BiMap key值与value都是不能相同的
用处如:根据用户找邮箱或者根据邮箱找用户
public static void main(String[] args) {
BiMap<String, String> bimap = HashBiMap.create();
bimap.put("www.baidu.com", "百度");
bimap.put("www.sina.com", "新浪");
bimap.put("www.google.com", "谷歌");
String str = bimap.inverse().get("百度");
System.out.println(str);
System.out.println(bimap.inverse().inverse() == bimap);
}
/*
output:
www.baidu.com
true
*/
上面的的代码只对一种容器的使用进行了说明,其容器的使用大同小异!