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());
		}
	}
}

City类:

/**
 * Created by wenniuwuren on 2015/6/4.
 */
public class City {
	private String cityName;
	private Integer population;
	private Double averageRainfall;

	public City(String cityName, Integer population, Double averageRainfall) {
		this.cityName = cityName;
		this.population = population;
		this.averageRainfall = averageRainfall;
	}

	public String getCityName() {
		return cityName;
	}

	public void setCityName(String cityName) {
		this.cityName = cityName;
	}

	public Integer getPopulation() {

		return population;
	}

	public void setPopulation(Integer population) {
		this.population = population;
	}

	public Double getAverageRainfall() {
		return averageRainfall;
	}

	public void setAverageRainfall(Double averageRainfall) {
		this.averageRainfall = averageRainfall;
	}

}

CityByRainfall类:

import com.google.common.primitives.Doubles;

import java.util.Comparator;

public class CityByRainfall implements Comparator<City> {
	@Override
	public int compare(City city1, City city2) {
		return Doubles.compare(city1.getAverageRainfall(), city2.getAverageRainfall());
	}
}

输出结果:

參考资料:

《Getting Started with Google Guava》

时间: 2024-12-29 18:00:01

Guava ---- Ordering排序工具的相关文章

让开发效率爆表的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.I

[Google Guava] 1-4 排序: Guava强大的”流畅风格比较器”

原文链接 译者: 沈义扬 排序器[Ordering]是Guava流畅风格比较器[Comparator]的实现,它可以用来为构建复杂的比较器,以完成集合排序的功能. 从实现上说,Ordering实例就是一个特殊的Comparator实例.Ordering把很多基于Comparator的静态方法(如Collections.max)包装为自己的实例方法(非静态方法),并且提供了链式调用方法,来定制和增强现有的比较器. 创建排序器:常见的排序器可以由下面的静态方法创建 方法 描述 natural() 对

Atitit apache 和guava的反射工具

apache1 Spring的反射工具类 ReflectionUtils1 Guava 反射工具2 apache  34             7,340 ConstructorUtils.java 34            16,263 FieldUtils.java 34             4,918 MemberUtils.java 34            14,175 MethodUtils.java 34            30,316 TypeUtils.java

一步一步跟我学习lucene(13)---lucene搜索之自定义排序的实现原理和编写自己的自定义排序工具

自定义排序说明 我们在做lucene搜索的时候,可能会需要排序功能,虽然lucene内置了多种类型的排序,但是如果在需要先进行某些值的运算然后在排序的时候就有点显得无能为力了: 要做自定义查询,我们就要研究lucene已经实现的排序功能,lucene的所有排序都是要继承FieldComparator,然后重写内部实现,这里以IntComparator为例子来查看其实现: IntComparator相关实现 其类的声明为 public static class IntComparator exte

文本去重排序工具

#!/usr/bin/env python # -*- coding: utf-8 -*- # Author: Forsaken import getopt import os import sys def main(): try: opts, args = getopt.getopt(sys.argv[1:], 'hf:s', ['help', 'file=', 'sort']) except getopt.GetoptError as e: print('[-] %s' % e) usage

Google guava工具类的介绍和使用

概述 工具类 就是封装平常用的方法,不需要你重复造轮子,节省开发人员时间,提高工作效率.谷歌作为大公司,当然会从日常的工作中提取中很多高效率的方法出来.所以就诞生了guava. guava的优点: 高效设计良好的API,被Google的开发者设计,实现和使用 遵循高效的java语法实践 使代码更刻度,简洁,简单 节约时间,资源,提高生产力 Guava工程包含了若干被Google的 Java项目广泛依赖 的核心库,例如: 集合 [collections] 缓存 [caching] 原生类型支持 [

Guava学习总结之- 3 - Basic Utilities - Ordering

Guava 的 Ordering 可以说是更加强大的Java comparator, Ordering本身就是一个继承于Comparator的接口, 但是它还支持一些基于Comparator的操作例如 reverse, max, min, 它甚至还可以通过不同Ordering之间的组合或者链接(用Decorate的模式)完成更加强大的排序功能. 创建 有四种比较常见的(静态)创建方式 nature()  用对象本身的compareTo()方法来进行比较 usingToString()  通过传入

[Google Guava] 排序: Guava强大的”流畅风格比较器”

原文链接 译者: 沈义扬 排序器[Ordering]是Guava流畅风格比较器[Comparator]的实现,它可以用来为构建复杂的比较器,以完成集合排序的功能. 从实现上说,Ordering实例就是一个特殊的Comparator实例.Ordering把很多基于Comparator的静态方法(如Collections.max)包装为自己的实例方法(非静态方法),并且提供了链式调用方法,来定制和增强现有的比较器. 创建排序器:常见的排序器可以由下面的静态方法创建 方法 描述 natural() 对

Guava工具类

转自 https://blog.csdn.net/qq_34231010/article/details/82530368 一.集合工具1.Lists List<Integer> list1 = Lists.newArrayList(0, 2, 5);List<Integer> list2 = Lists.newArrayList(3, 4);// 以指定大小分割listSystem.out.println(Lists.partition(list1, 2)); // [[0, 2