guava中扩展容器的一些常用类和方法(一)

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
	*/

上面的的代码只对一种容器的使用进行了说明,其容器的使用大同小异!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值