如何在Java中使用hashMap获取特定的重复值键

Emekamba

我的代码有这个问题。我创建了一个hashMap,将文件路径存储为键,将Md5哈希存储为值,如下所示:

Key :  [C:\Users\Mbaegbu\Documents\.jpg] Valu   :  [36305b66726e9d3d8d9bbff2ec07e63b]
Key :  [C:\Users\Mbaegbu\Documents\.jpg] Value  :  [88434b1b9794feacb373048fccd901c1]
Key :  [C:\Users\Mbaegbu\Documents\.jpg] Value  :  [3743436e13b95c2e9ff46dbd8516ea48]
Key :  [C:\Users\Mbaegbu\Documents\.avi]  Value :  [416c2fe27204ce3a78abfb18963c4eb7]
Key :  [C:\Users\Mbaegbu\Documents\.jpg]  Value :  [8fd65bee3e7d26328e978cf2925c3625]
Key :  [C:\Users\Mbaegbu\Documents\.avi]  Value :  [37ba22d609b4e384c00c35ca70a1837d]

我只希望它显示重复的值,并按如下所示键入等效项:

  Key:[C:\Users\Mbaegbu\Documents\.jpg]  Value:[f884c30bfad89a285507d4c381700583]
  Key :  [C:\Users\Mbaegbu\Documents\.jpg] Value:[f884c30bfad89a285507d4c381700583]
  Key :  [C:\Users\Mbaegbu\Documents\.jpg]  Value:[f884c30bfad89a285507d4c381700583]

这是我的代码,每当我运行它时,它都会显示一个空集,如下所示:

null null null null

  Map<Set<String>, List<String>> map = new HashMap<>();
           try {
                for(File file : f.listFiles()){
                   //System.out.println((hashed(file)));
                        map.put(file(file),(hashed(file)));

               }

           } catch (IOException ex) {
               Logger.getLogger(DelDuplicate.class.getName()).log(Level.SEVERE,    null,   ex);
           }
          Map<Set<String>,List<String>> map2 = new HashMap<>();
          map2.putAll(map);
           for (Map.Entry<Set<String>, List<String> > entry : map2.entrySet()) {
               //System.out.println(" Key :  " + entry.getKey() 
                                  //+ "  Value :  " + entry.getValue());

                modedHash mode = new modedHash();
               System.out.println(mode.getKeys(getDuplicate(entry.getValue())));

            }               

     }
          public class modedHash extends HashMap{
            public List<Object> getKeys(Object value){
             List<Object> keys = null;
              if(containsValue(value)){
               keys = new ArrayList<>();
                Set<String> keyset = keySet();
          for (Object key : keyset){
            if(get(key).equals(value)){
              keys.add(key);
       }
   }
  }
  return keys;
}

  public  List<String> hashed(File file) throws IOException{
  List<String> list = new ArrayList<>();
  String hash;
  if(file.exists() && file != (null)){
      //for(File f : file.listFiles()){
            hash = MD5.asHex(MD5.getHash(file));
         list.add(hash);

  //}

  }
 return list;
}
     public  Set<String> file (File f){
       Set<String> list = new HashSet<>();

      if(f.exists() && f != (null)){
      //for(File file : f.listFiles()){
          list.add(f.getPath());
      // }
    }
    return list;
  }

 public static <T> List  getDuplicate(Collection<T> check){

  final List<T> duplicates = new ArrayList<>();

  Set<T> uniques = new HashSet<T>(){
    public boolean add(T e){
        if(contains(e)){
            duplicates.add(e);
        }
        return super.add(e);
    }


  };

  for(T t : check)
      uniques.add(t);

  return duplicates;

}

modedHash类扩展了HashMap,该HashMap用于比较实际值键。getDuplcate方法检查List并仅输出重复项。请您在此问题上的帮助将不胜感激。

VGR

您的目标似乎是查找具有重复MD5哈希的文件。由于哈希是文件的预期唯一标识符,因此应将其用作密钥:

public void findDuplicateFiles(File[] files) {

    // In Java 8, the following loop can be replaced by:
    //Map<String, List<File>> filesByHash =
    //    Stream.of(files).filter(File::isFile).collect(
    //        Collectors.groupingBy(file -> MD5.asHex(MD5.getHash(file))));

    Map<String, List<File>> filesByHash = new HashMap<>();
    for (File file : files) {
        if (!file.isFile()) {
            continue;
        }

        String hash = MD5.asHex(MD5.getHash(file));

        List<File> filesForHash = filesByHash.get(hash);
        if (filesForHash == null) {
            filesByHash.put(hash, filesForHash = new ArrayList<File>());
        }

        filesForHash.add(file);
    }

    for (Map.Entry<String, List<File>> entry : filesByHash.entrySet()) {
        List<File> filesForHash = entry.getValue();
        if (filesForHash.size() > 1) {
            String hash = entry.getKey();
            System.out.printf("%,d files have hash %s:%n",
                filesForHash.size(), hash);

            for (File file : filesForHash) {
                System.out.println("  " + file);
            }
        }
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在嵌套重复控件中使用 HashMap 根据键获取值

来自分类Dev

如何在MS Excel中使用IF获取特定列值?

来自分类Dev

如何在Hashmap中返回特定值的键?

来自分类Dev

如何在Java中使用XPath获取属性值?

来自分类Dev

如何在java中使用ndk获取证书值

来自分类Dev

如何在Hashmap中删除重复的键值对?-不只是重复的键或值

来自分类Dev

如何在Hashmap中删除重复的键值对?-不只是重复的键或值

来自分类Dev

如何在python中使用重复键创建嵌套字典

来自分类Dev

如何在MongoDB中使用特定键将新值推入数组?

来自分类Dev

如何在 ReactJS 的嵌套状态中使用所有特定键更改值

来自分类Dev

如何在Andorid中使用迭代器获取Json键和值

来自分类Dev

如何在while循环PySimpleGUI中使用其键获取日历按钮的值?

来自分类Dev

如何在Python的嵌套字典中使用相同的键获取所有值?

来自分类Dev

如何在Andorid中使用迭代器获取Json键和值

来自分类Dev

Spring MVC,HashMap作为模型-如何在jsp中使用javascript变量作为键来获取价值

来自分类Dev

Java如何在特定键中获取所有映射值?

来自分类Dev

如何在Java 8中使用Java 7 HashMap?

来自分类Dev

在Java HashMap中使用对象作为键

来自分类Dev

如何在Jquery中使用类获取和放置这些特定字段的值

来自分类Dev

如何在php中使用正则表达式从句子中获取特定值

来自分类Dev

如何使用python从字典中获取特定键的值

来自分类Dev

如何在Java中使用递增循环来获取数量递增的变量(以获取所述变量的值)?

来自分类Dev

如何在Python中使用相同的键添加字典的值

来自分类Dev

如何在Python中使用键扩展字典中的值

来自分类Dev

如何在postgresql中使用jsonb的键作为行值?

来自分类Dev

如何在Java中的Map中增加特定键的值?

来自分类Dev

可以在jsf中使用[]获取hashMap的值?

来自分类Dev

如何在Java中使用HashMap实现堆栈?

来自分类Dev

如何在获取“无法解析放置符号”错误时向Hashmap添加键和值

Related 相关文章

  1. 1

    在嵌套重复控件中使用 HashMap 根据键获取值

  2. 2

    如何在MS Excel中使用IF获取特定列值?

  3. 3

    如何在Hashmap中返回特定值的键?

  4. 4

    如何在Java中使用XPath获取属性值?

  5. 5

    如何在java中使用ndk获取证书值

  6. 6

    如何在Hashmap中删除重复的键值对?-不只是重复的键或值

  7. 7

    如何在Hashmap中删除重复的键值对?-不只是重复的键或值

  8. 8

    如何在python中使用重复键创建嵌套字典

  9. 9

    如何在MongoDB中使用特定键将新值推入数组?

  10. 10

    如何在 ReactJS 的嵌套状态中使用所有特定键更改值

  11. 11

    如何在Andorid中使用迭代器获取Json键和值

  12. 12

    如何在while循环PySimpleGUI中使用其键获取日历按钮的值?

  13. 13

    如何在Python的嵌套字典中使用相同的键获取所有值?

  14. 14

    如何在Andorid中使用迭代器获取Json键和值

  15. 15

    Spring MVC,HashMap作为模型-如何在jsp中使用javascript变量作为键来获取价值

  16. 16

    Java如何在特定键中获取所有映射值?

  17. 17

    如何在Java 8中使用Java 7 HashMap?

  18. 18

    在Java HashMap中使用对象作为键

  19. 19

    如何在Jquery中使用类获取和放置这些特定字段的值

  20. 20

    如何在php中使用正则表达式从句子中获取特定值

  21. 21

    如何使用python从字典中获取特定键的值

  22. 22

    如何在Java中使用递增循环来获取数量递增的变量(以获取所述变量的值)?

  23. 23

    如何在Python中使用相同的键添加字典的值

  24. 24

    如何在Python中使用键扩展字典中的值

  25. 25

    如何在postgresql中使用jsonb的键作为行值?

  26. 26

    如何在Java中的Map中增加特定键的值?

  27. 27

    可以在jsf中使用[]获取hashMap的值?

  28. 28

    如何在Java中使用HashMap实现堆栈?

  29. 29

    如何在获取“无法解析放置符号”错误时向Hashmap添加键和值

热门标签

归档