Map去重,去重value相同的元素,保留key最小的那个值

Map<Integer,String>,Integer代表时间撮,String代表文本信息
去重函数:就是删除Map中value相同的元素,只保留key最小的那个元素

public static Map<Integer,String> RemoveRepFromMap(Map<Integer,String> map){

  Set<Entry<Integer,String>> set = map.entrySet();
  List<Entry<Integer,String>> list = new ArrayList<Entry<Integer,String>>(set);

  Collections.sort(list,new Comparator<Entry<Integer,String>>(){
    //重载compare函数  对list集合进行排序,根据value值进行排序,
    public int compare(Entry<Integer,String> entry1,Entry<Integer,String> entry2){
      return Integer.valueOf(entry1.getValue().hashCode()-entry2.getValue().hashCode());
    }
  });

  for(int i=0;i<list.size();i++){//删除重复的元素
    Integer key = list.get(i).getKey();
    String value = list.get(i).getValue();

    int j=i+1;//map中的下一个
    if(j<list.size()){
      Integer next_key = list.get(j).getKey();
      String next_value = list.get(j).getValue();

      if(value == next_value){
      if(key.hashCode() < next_key.hashCode()){map.remove(next_key);list.remove(j);
      }else{
        map.remove(key);list.remove(i);
      }
      i--;
    }

  }
  return map;
}

Map<Integer,String>首先的特性就是:键key如果相同,将会把原来的key进行覆盖掉的,所以key一定不会重复

几个函数的作用说明:

Map.Entry表示单个映射关系即一个key+value
entrySet()方法返回此映射中包含的映射关系的 set 视图集合,其实说白了就是    多个  key+value 的集合,解释下这里面的set,只有当key和value都一一对应相同的时候,才不会被重复计算【而这种情况根本就不会存到map里面去,因为他会覆盖原来的key】,如果key不同,键相同,依然是在entrySet里面的
时间: 2024-09-30 10:27:57

Map去重,去重value相同的元素,保留key最小的那个值的相关文章

【方法1】删除Map中Value反复的记录,而且仅仅保留Key最小的那条记录

介绍 晚上无聊的时候,我做了一个測试题,測试题的大体意思是:删除Map中Value反复的记录,而且仅仅保留Key最小的那条记录. 比如: I have a map with duplicate values: ("A", "1"); ("B", "2"); ("C", "2"); ("D", "3"); ("E", "

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

根据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 j

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

介绍 晚上无聊的时候,我做了一个测试题,测试题的大体意思是:删除Map中Value重复的记录,并且只保留Key最小的那条记录. 例如: I have a map with duplicate values: ("A", "1"); ("B", "2"); ("C", "2"); ("D", "3"); ("E", "3

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

icemouse210写了一个Perl版本的,发挥了脚本高度封装的优势.我把代码贴出来,供大家参考分享. #!/user/bin/perl -w use English; use strict; use warnings; my %test_hash=( "A" => '1', "B" => '2', "C" => "2", "D" => "3", "E

【方法2】删除Map中Value反复的记录,而且仅仅保留Key最小的那条记录

依据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

获取元素在页面中left,top值(忽略其父级的定位)

函数用到的属性有: element.offsetLeft 返回当前元素的相对水平偏移位置的偏移容器 element.offsetParent 返回元素的偏移容器 element.offsetTop 返回当前元素的相对垂直偏移位置的偏移容器 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</ti

初探oracle删除重复记录,只保留rowid最小的记录

如题,初探oracle删除重复记录,只保留rowid最小的记录(rowid可以反映数据插入到数据库中的顺序) 一.删除重复记录可以使用多种方法,如下只是介绍了两种方法(exist和in两种). 1.首先创建一个测试表. create table my_users( id number, username varchar2(20), sal number ) 2.插入测试数据 begin for i in 1..10 loop insert into my_users values(i,'carl

sql 多个字段分组,删除重复记录,保留ID最小的一条

IF OBJECT_ID('cardDetail') IS NOT NULL DROP TABLE cardDetail CREATE TABLE cardDetail ( id INT IDENTITY(1,1) PRIMARY KEY, cardNO VARCHAR(8), NAME VARCHAR(30), idCard VARCHAR(18), cardState CHAR(1)--卡片状态 1正常 2注销 ) INSERT cardDetail(cardNO,NAME,idCard,c

交换数组中两个元素的位置,元素包括key和value 一维数组

/*author: [email protected]description: 交换数组中两个元素的位置,元素包括key和value,具体用法见下面的例子*/$arr = array(11=>'a',22=>'b',33=>'c',44=>'d');$res = array_exchange($arr, 11 ,33); //example:echo '<pre>';print_r ($res);echo '</pre>'; function array_e