让开发效率爆表的Guava ---- Ordering排序工具

使用Guava的排序工具类, 快速实现对象的单变量排序和多变量排序, 让你的开发效率爆炸...

import com.google.common.collect.Lists;
import com.google.common.collect.Ordering;
import com.google.common.primitives.Ints;

import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
import java.util.List;

public class CityByPopluation implements Comparator<City> {

	@Override
	public int compare(City city1, City city2) {
		return Ints.compare(city1.getPopulation(), city2.getPopulation());
	}

	public static void main(String[] args) {
		CityByPopluation cityByPopluation = new CityByPopluation();
		CityByRainfall cityByRainfall = new CityByRainfall();

		// 根据第二个参数排序
		City city1 = new City("Beijing", 100000, 55.0);
		City city2 = new City("Shanghai", 100000, 45.0);
		City city3 = new City("ShenZhen", 100000, 33.8);

		List<City> cities = Lists.newArrayList(city1, city2, city3);

		/**
		 * 单参数排序
		 */
		// 排序反转
		Ordering<City> firstOrdering = Ordering.from(cityByRainfall).reverse();
		Collections.sort(cities, firstOrdering);
		Iterator<City> cityByRainfallIterator = cities.iterator();
		while (cityByRainfallIterator.hasNext()) {
			System.out.println(cityByRainfallIterator.next().getCityName());
		}

		System.out.println("I was evil dividing line");

		/**
		 * 多参数排序
		 */
		Ordering<City> secondaryOrdering = Ordering.
				from(cityByPopluation).compound(cityByRainfall);
		Collections.sort(cities, secondaryOrdering);
		Iterator<City> cityIterator = cities.iterator();
		while (cityIterator.hasNext()) {
			System.out.println(cityIterator.next().getCityName());
		}

		/**
		 * 取得最小最大值
		 */
		Ordering<City> ordering = Ordering.from(cityByRainfall);
		// 降雨量最高的2个城市
		List<City> topTwo = ordering.greatestOf(cities, 2);
		Iterator<City> topTwoIterator = topTwo.iterator();
		while (topTwoIterator.hasNext()) {
			System.out.println("降雨量最高城市" + topTwoIterator.next().getCityName());
		}

		// 降雨量最低的一个城市
		List<City> bottomOne = ordering.leastOf(cities, 1);
		Iterator<City> bottomOneIterator = bottomOne.iterator();
		while (bottomOneIterator.hasNext()) {
			System.out.println("降雨量最低的城市" + bottomOneIterator.next().getCityName());
		}
	}
}

输出结果:

参考资料:

《Getting Started with Google Guava》

时间: 2024-08-26 15:29:28

让开发效率爆表的Guava ---- Ordering排序工具的相关文章

让开发效率爆表的Guava ---- 基础工具篇

使用现成的库的原因, 既能减少自己开发所带来的bug, 同时又大大提高了开发效率, 当然这也是Java语言流行的一个原因----拥有海量的开源包. 本篇从Guava基础工具入手开始介绍这个广泛使用的库: package com.wenniuwuren.guava; import java.io.UnsupportedEncodingException; import java.util.Date; import java.util.HashMap; import com.google.commo

让开发效率爆表的Guava ---- Table矩阵

使用Guava对矩阵的实现, 做一些矩阵存贮等操作将大大提高效率, 而不是自己用JDK的Array去实现, 可能带来不少bug, 而且增加代码复杂度. package com.wenniuwuren.collections; import java.util.Map; import com.google.common.collect.HashBasedTable; /** * Table: 矩阵的实现 * @author wenniuwuren * */ public class TableTe

让开发效率爆表的Guava ---- Maps

本文介绍了Guava集合类Maps的使用, 比如将具有唯一主键的对象快速存入Map等... package com.wenniuwuren.guava; import java.util.List; import java.util.Map; import java.util.NavigableMap; import java.util.Set; import com.google.common.base.Function; import com.google.common.collect.Li

让开发效率爆表的Guava ---- Lists列表

Guava对JDK  List的扩展, 方便增加list到list中, 方便拆分list package com.wenniuwuren.collections; import java.util.Iterator; import java.util.List; import com.google.common.collect.Lists; public class ListsTest { public static void main(String[] args) { Person perso

让开发效率爆表的Guava ---- FluentIterable迭代器

Guava提供了可以在Iterator中进行处理的功能更丰富的迭代器, 其实就像是加了一个代理, 增加一些功能. package com.wenniuwuren.collections; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import com.google.common.base.Function; import com.google.common.base.Joiner;

让开发效率爆表的Guava ---- Files文件操作

相信很多人最开始用JDK库对文件进行操作时, 都被繁琐重复的代码所恶心到, 当然这也是各种库出现的原因. 接下来介绍Guava的Files类, 提供了对文件操作的极大简化, 如程序员可以完全不用关心流的开关闭. 本文大致介绍了文件的复制.重命名.内容读取等对文件的基本操作. 代码示例: import com.google.common.base.Charsets; import com.google.common.collect.Lists; import com.google.common.h

让开发效率爆表的Guava ---- Concurrent并发

Guava在JDK1.5的基础上, 对并发包进行扩展, 有一些是易用性的扩展(如Monitor), 有一些是功能的完善(如ListenableFuture), 再加上一些函数式编程的特性, 使并发包的灵活性极大的提高... Monitor的使用: import com.google.common.util.concurrent.Monitor; import java.util.ArrayList; import java.util.Iterator; import java.util.List

让开发效率爆表的Guava ---- Sets

本问介绍了Guava中Sets集合类的一般使用情况, 例如集合的互斥. 交集. 并集等... package com.wenniuwuren.collections; import java.util.Iterator; import java.util.Set; import com.google.common.collect.Sets; /** * 对Sets工具类的使用 * @author wenniuwuren * */ public class SetsTest { public st

让开发效率爆表的Guava ---- EventBus事件驱动模型

在软件开发过程中, 难免有信息的共享或者对象间的协作. 如何让对象间信息共享高效, 并且耦合性低, 这是一个难题. 而耦合性高将带来编码修改牵一发而动全身的连锁效应, Spring的风靡正是因为解决了高耦合问题. 本篇介绍的EventBus中也用到了Spring中的依赖注入, 来进行对象和对象间的解耦(如@Subscribe). Guava解决高耦合采用的是事件驱动模型的思路, 对象可以订阅(subscribe)特定的事件或者发布(publish)特定的事件去被消费. 从下面的代码可以看出, E