`
yaerfeng1989
  • 浏览: 233140 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java map按照value值来比较大小并且返回最终结果

阅读更多

代码下载地址:http://www.zuidaima.com/share/1830834176347136.htm

原文:java map按照value值来比较大小并且返回最终结果

package com.zuidaima.util;

import java.util.Comparator;
import java.util.HashMap;
import java.util.Map;
import java.util.TreeMap;

public class ValueComparator implements Comparator<Long> {

	Map<Long, Double> base;

	public ValueComparator(Map<Long, Double> base) {
		this.base = base;
	}

	public int compare(Long a, Long b) {
		if (base.get(a).doubleValue() >= base.get(b).doubleValue()) {
			return -1;
		} else {
			return 1;
		}
	}

	public static <K, V extends Comparable<V>> Map<K, V> sortByValues(
			final Map<K, V> map) {
		Comparator<K> valueComparator = new Comparator<K>() {
			public int compare(K k1, K k2) {
				int compare = map.get(k2).compareTo(map.get(k1));
				if (compare == 0)
					return 1;
				else
					return compare;
			}
		};
		Map<K, V> sortedByValues = new TreeMap<K, V>(valueComparator);
		sortedByValues.putAll(map);
		return sortedByValues;
	}

	public static void main(String[] args) {
		HashMap<Long, Double> map = new HashMap<Long, Double>();
		map.put(1l, 99.5);
		map.put(2l, 67.2);
		map.put(3l, 67.5);
		map.put(4l, 67.6);

		ValueComparator bvc = new ValueComparator(map);
		TreeMap<Long, Double> sorted_map = new TreeMap<Long, Double>(bvc);

		System.out.println("unsorted map: " + map);

		sorted_map.putAll(map);

		System.out.println("results: " + sorted_map);

		Map<Long, Double> sorted_map2 = sortByValues(map);
		
		System.out.println("results2: " + sorted_map2);
	}
}

输出结果:

unsorted map: {1=99.5, 2=67.2, 3=67.5, 4=67.6}
results: {1=99.5, 4=67.6, 3=67.5, 2=67.2}
results2: {1=99.5, 4=67.6, 3=67.5, 2=67.2}

 

通过key比较大小的原理类似,大家改写下就好了。enjoy it。

2
0
分享到:
评论
2 楼 mfkvfn 2014-06-05  
按key排序,直接用TreeMap就可以了。这个默认key升序排列的排序树。
如果要按key降序排列。用
Map<Long,Double> map=new TreeMap(new Comparator<Long>(){
  public int compare(Long o1, Long o2){
      return o2-o1;
  }
});
map.put(1l, 99.5);  
map.put(2l, 67.2);  
map.put(3l, 67.5);  
map.put(4l, 67.6);  
System.out.println(result); //出来的结果已经按key降序排列了
1 楼 canghailan 2014-06-05  
package test;

import java.util.Arrays;
import java.util.Comparator;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Map.Entry;

public class Main {
	public static void main(String[] args) {
		HashMap<Long, Double> map = new HashMap<Long, Double>();
		map.put(1l, 99.5);
		map.put(2l, 67.2);
		map.put(3l, 67.5);
		map.put(4l, 67.6);
		System.out.println(map);

		Map.Entry<Long, Double>[] temp = toArray(map);
		sortByValue(temp);
		Map<Long, Double> result = toMap(temp);
		System.out.println(result);
	}

	private static <K, V extends Comparable<V>> Map.Entry<K, V>[] toArray(
			Map<K, V> map) {
		return map.entrySet().toArray(new Map.Entry[map.size()]);
	}

	private static <K, V extends Comparable<V>> void sortByValue(
			Map.Entry<K, V>[] array) {
		Arrays.sort(array, new Comparator<Map.Entry<K, V>>() {
			public int compare(Entry<K, V> o1, Entry<K, V> o2) {
				return o2.getValue().compareTo(o1.getValue());
			}
		});
	}

	private static <K, V extends Comparable<V>> Map<K, V> toMap(
			Map.Entry<K, V>[] array) {
		Map<K, V> result = new LinkedHashMap<K, V>(array.length);
		for (Map.Entry<K, V> entry : array) {
			result.put(entry.getKey(), entry.getValue());
		}
		return result;
	}
}

相关推荐

    对map里面的value进行排序

    然而,有时我们需要对Map中的值进行排序,例如按照value的大小进行升序或降序排列。这篇博客"对map里面的value进行排序"探讨的就是如何实现这一需求。 首先,我们了解Map接口的基本概念。Map接口不直接支持排序,...

    Java集合框架Map接口.pdf

    在Map中,每个键(key)都是唯一的,用于标识对应的值(value),而值可以重复出现。这种数据结构广泛应用于各种场景,如缓存、配置管理等。 Map接口定义了一系列操作键值对的方法: 1. `put(K key, V value)`:将...

    java求数组元素重复次数和java字符串比较大小示例

    该方法接受一个整型数组`array`和一个整数`max`(表示数组中可能的最大元素值)作为参数,返回一个Map对象,其中包含了重复次数最多的元素值(value)及其重复次数(maxCount)。 首先,创建一个HashMap类型的`...

    Java集合Collection、List、Set、Map使用详解

    ### Java集合Collection、List、Set、Map使用详解 #### 集合框架概述 ##### 容器简介 在Java编程中,容器(Container)的概念至关重要。容器是用来存储和管理对象的一种方式,它允许程序员高效地处理大量数据。...

    Java判断List中相同值元素的个数实例

    总结来说,Java中统计List中相同值元素个数的方法是利用Map数据结构,通过Key来存储元素,Value来记录元素出现的次数。这种方法简洁且高效,适合处理大规模数据集。在实际开发中,你可以根据具体需求选择`HashMap`或...

    java的基础测试题(带答案)

    最终`map.size()`的结果为1,因为尽管两次插入了相同的键,但只保留了一个键值对。 ### 3. Java中的事件处理机制 `AWTEvent`是Java AWT(Abstract Window Toolkit)包中的一个类,用于表示事件,如键盘输入、鼠标...

    Java 常用类讲解

    Map接口没有顺序,但它提供了一些关键方法,如`put(K key, V value)`用于添加键值对,`get(K key)`用于根据键获取值,`size()`返回键值对的数量,`isEmpty()`检查Map是否为空,以及`keySet()`返回包含所有键的集合,...

    java面试-leetcode面试题解之第13题罗马数字转整数-编程.zip

    3. 在遍历过程中,维护一个变量记录当前的整数值,同时需要一个变量来存储上一个遇到的罗马数字的值,以便进行大小比较。 4. 最后,返回计算出的整数值。 在Java中,可以使用HashMap来实现映射,用StringBuilder或...

    软件开发工程师(JAVA)笔试题

    最终结果为 3.5,故选 A。 ### 5. 对象的比较 - 在 Java 中,`equals()` 方法用于比较两个对象的内容是否相等。 - **答案解析**:选项 A 错误,`equals()` 比较的是内容而不是引用;选项 B 错误,`==` 操作符比较的...

    Java collections(Java的数据结构)

    - **特点**:`TreeMap` 通过红黑树实现排序功能,按照键的自然顺序或自定义比较器排序。 - **应用场景**:适用于需要保持键值对有序的情况。 - **方法示例**: - `put(Object key, Object value)`: 将指定键值对...

    Java进阶路线

    最后,性能优化是每个Java开发者都需要关注的问题: - **对象空间优化**:减少对象创建次数,合理使用缓存。 - **循环优化**:减少循环内的计算量,避免不必要的循环。 综上所述,Java的学习之路是一个不断积累的...

    java8如何通过Lambda处理List集合

    在 Java 8 之前,我们通常使用 for 循环或 Iterator 来遍历 List 集合。但是,使用 Lambda 表达式可以使得代码变得更加简洁高效。例如: ```java List&lt;User&gt; userList = Lists.newArrayList(); User user1 = new ...

    JAVA API 总结

    - **`removeLast()`**:移除并返回列表的最后一个元素。 2. **三种遍历方式**: - **`for` 循环**:适用于已知大小的集合。 - **`Iterator`**:适用于所有类型的集合。 - **`foreach` 循环**:简洁易读,适用...

    java经典面试题.doc

    ### Java经典面试题知识点解析 #### 1. super()与this()的区别? - **super()**:用于调用父类的构造方法。在一个子类的构造方法中,如果要调用父类的构造方法,必须使用`super()`,并且这个调用语句必须放在子类...

    js实现的map方法示例代码

    首先实例化一个Map对象,然后可以使用put方法添加键值对、get方法获取值、remove方法删除键值对以及size方法和isEmpty方法来获取Map的大小和判断是否为空。 最后,代码中还展示了如何使用FunctionMap,通过标签在...

    超级有影响力霸气的Java面试题大全文档

    当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望让程序等待方法的返回时,就应该使用异步编程,在很多情况下采用异步途径往往更有效率。 20、abstract class和interface有什么区别? ...

    java面试题

    当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望让程序等待方法的返回时,就应该使用异步。在很多情况下采用异步往往更有效率。 数据库三大范式? 答:1:确保每列都是不可分割的原子值 2...

    java基础知识点

    ### Java基础知识点详解 #### 一、Java基础 在Java编程语言中,基础部分涵盖了学习任何编程语言都不可或缺的关键概念。 - **变量**: 变量是程序中最基本的数据存储单元,用于保存各种类型的数据。 - **运算符**: ...

    java 中cookie的详解及简单实例

    同样,可以封装一个方法来根据Cookie的名称查找并返回其值。这里可以通过创建一个`Map, Cookie&gt;`来存储所有Cookie,便于按名称查找: ```java public static Cookie getCookieByName(HttpServletRequest request...

Global site tag (gtag.js) - Google Analytics