【方法2】删除Map中Value重复的记录,并且只保留Key最小的那条记录

简介: <p>根据guigui111111的建议:先把Map按Key从大到小排序,然后再把Key和Value互换。这也是一种很好的思路,我写了一下代码,顺便贴上来,供大家参考与分享。</p> <p><br></p> <p></p> <pre code_snippet_id="401929" snippet_file_name="blog_20140622_1_6219487" name="c

根据guigui111111的建议:先把Map按Key从大到小排序,然后再把Key和Value互换。这也是一种很好的思路,我写了一下代码,顺便贴上来,供大家参考与分享。


package shuai.study.map;

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

/**
 * @author shengshu
 * 
 */
public class UniqueMap1 {

	// Transfer to sorted Map
	public static Map<String, String> transferToSortedMap(Map<String, String> map) {
		// Define comparator for TreeMap
		// Note: Sort according to descending, because retain the smaller Key's record when exchanging Map's Key and Value
		Map<String, String> sort_map = new TreeMap<String, String>(new Comparator<String>() {
			@Override
			public int compare(String key1, String key2) {
				return key2.hashCode() - key1.hashCode();
			}
		});

		sort_map.putAll(map);

		return sort_map;
	}

	// Exchange Map's Key and Value
	public static Map<String, String> exchangeMap(Map<String, String> map) {
		Map<String, String> exchange_map = new TreeMap<String, String>();

		for (String key : map.keySet()) {
			String value = map.get(key);

			exchange_map.put(value, key);
		}

		return exchange_map;
	}

	// Print Map
	public static void printMap(Map<String, String> map) {
		Iterator<Entry<String, String>> iterator = map.entrySet().iterator();

		while (iterator.hasNext()) {
			Entry<String, String> entry = iterator.next();

			String key = entry.getKey();
			String value = entry.getValue();

			System.out.println(key + " --> " + value);
		}
	}

	public static void main(String[] args) {
		Map<String, String> map = new HashMap<String, String>();
		map.put("A", "1");
		map.put("C", "3");
		map.put("D", "2");
		map.put("B", "3");
		map.put("E", "3");

		// Sort Map by descending order
		// Note: Sort according to descending, because retain the smaller Key's record when exchanging Map's Key and Value
		Map<String, String> sort_map = UniqueMap1.transferToSortedMap(map);

		// Exchange Key and Value for overlapping repetition record
		Map<String, String> exchange_map = UniqueMap1.exchangeMap(sort_map);

		// Exchange Map for recovering Key and Value, this Map is what we want
		exchange_map = UniqueMap1.exchangeMap(exchange_map);

		// Print Map
		UniqueMap1.printMap(exchange_map);
	}
}


相关文章
|
6天前
|
存储
`map()`方法在什么场景下会比 `forEach()`方法更高效?
综上所述,当需要对数组元素进行复杂的转换并生成新数组、进行链式调用和函数式编程、处理元素之间存在明确映射关系的情况以及与其他数组方法结合使用时,`map()`方法比`forEach()`方法更高效,能够使代码更加简洁、清晰和易于维护。
45 32
WK
|
20天前
|
Python
Python中format_map()方法
在Python中,`format_map()`方法用于使用字典格式化字符串。它接受一个字典作为参数,用字典中的键值对替换字符串中的占位符。此方法适用于从字典动态获取值的场景,尤其在处理大量替换值时更为清晰和方便。
WK
68 36
|
6天前
|
存储 JavaScript 前端开发
如何选择使用`map()`方法和`forEach()`方法?
选择使用`map()`方法还是`forEach()`方法主要取决于操作的目的、是否需要返回值、代码的可读性和维护性等因素。在实际开发中,需要根据具体的业务需求和场景来灵活选择合适的方法,以实现更高效、更易读和更易维护的代码。
13 3
|
16天前
|
存储 Java API
Java交换map的key和value值
通过本文介绍的几种方法,可以在Java中实现Map键值对的交换。每种方法都有其优缺点,具体选择哪种方法应根据实际需求和场景决定。对于简单的键值对交换,可以使用简单遍历法或Java 8的Stream API;对于需要处理值不唯一的情况,可以使用集合存储或Guava的Multimap。希望本文对您理解和实现Java中的Map键值对交换有所帮助。
20 1
|
30天前
|
存储 JavaScript 前端开发
《进阶篇第8章:vuex》包括理解vuex、安装vuex、搭建vuex环境、四个map方法的使用、模块化+名命空间
《进阶篇第8章:vuex》包括理解vuex、安装vuex、搭建vuex环境、四个map方法的使用、模块化+名命空间
17 3
|
1月前
|
Java
vue2知识点:vuex中四个map方法的使用,包括:mapState、mapGetters、mapMutations、mapActions
vue2知识点:vuex中四个map方法的使用,包括:mapState、mapGetters、mapMutations、mapActions
87 1
|
2月前
|
存储 JavaScript 前端开发
`forEach()`方法和`map()`方法哪个执行效率更高?
`forEach()`方法和`map()`方法哪个执行效率更高?
|
2月前
|
JavaScript 前端开发
JavaScript Array map() 方法
JavaScript Array map() 方法
|
2月前
数组方法中的`forEach()`方法和`map()`方法有什么区别?
数组方法中的`forEach()`方法和`map()`方法有什么区别?
|
2月前
|
JavaScript 前端开发
JavaScript 中 五种迭代数组的方法 every some map filter forEach
本文介绍了JavaScript中五种常用数组迭代方法:every、some、filter、map和forEach,并通过示例代码展示了它们的基本用法和区别。