两个Map<String, Decimal>或map数组,相同的key,值相加,不同则保留。

一、两个Map<String, Decimal>相同key相加,不同则保留

public static void main(String[] args) {
        Map<String, BigDecimal> map1 = new HashMap<>();
        Map<String, BigDecimal> map2 = new HashMap<>();

        map1.put("a", BigDecimal.ONE);
        map1.put("b", BigDecimal.ONE);
        map1.put("c", BigDecimal.ONE);

        map2.put("a", BigDecimal.TEN);
        map2.put("b", BigDecimal.TEN);
        map2.put("d", BigDecimal.TEN);

        System.out.println(map1);
        System.out.println(map2);

        for (String key : map1.keySet()){
            if (map2.containsKey(key)){
                map2.put(key, map2.get(key).add(map1.get(key)));
            } else {
                map2.put(key, map1.get(key));
            }
        }

        System.out.println(map2);
    }

运行结果: 

二、同理List <Map<String, Decimal>>集合,相同KEY的value值相加,不同则保留的方法

public static void main(String[] args) {
        // map数组
        List<Map<String, BigDecimal>> mapList = new ArrayList<>();
        // 结果数组
        Map<String, BigDecimal> mapResult = new HashMap<>();

        Map<String, BigDecimal> map1 = new HashMap<>();
        Map<String, BigDecimal> map2 = new HashMap<>();

        map1.put("a", BigDecimal.ONE);
        map1.put("b", BigDecimal.ONE);
        map1.put("c", BigDecimal.ONE);

        map2.put("a", BigDecimal.TEN);
        map2.put("b", BigDecimal.TEN);
        map2.put("d", BigDecimal.TEN);

        System.out.println(map1);
        System.out.println(map2);
        // map数组中有两个map
        mapList.add(map1);
        mapList.add(map2);

        // 遍历map数组,将数组中key相同的值相加,key不同的值保留,结果放到mapResult中
        mapList.forEach(map -> {
            for (String key : map.keySet()){
                if (mapResult.containsKey(key)){
                    mapResult.put(key, mapResult.get(key).add(map.get(key)));
                } else {
                    mapResult.put(key, map.get(key));
                }
            }
        });

        System.out.println(mapResult);
    }

运行结果:

 

以下是使用dhash算法在Android中找出具有相似图片的文件的Java代码,将它们保存在Map<String, List<String>>中: ```java import java.io.File; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class DHashAlgorithm { // DHash算法的阈 private static final int THRESHOLD = 5; // 获取图片的dhash private static String getDHash(File file) { Bitmap bitmap = BitmapFactory.decodeFile(file.getAbsolutePath()); bitmap = Bitmap.createScaledBitmap(bitmap, 9, 8, true); int[] pixels = new int[bitmap.getWidth() * bitmap.getHeight()]; bitmap.getPixels(pixels, 0, bitmap.getWidth(), 0, 0, bitmap.getWidth(), bitmap.getHeight()); StringBuilder sb = new StringBuilder(); for (int i = 0; i < pixels.length; i++) { sb.append((pixels[i] & 0xff) > (pixels[i + 1] & 0xff) ? "1" : "0"); } String dHash = ""; for (int i = 0; i < sb.length(); i += 4) { int decimal = Integer.parseInt(sb.substring(i, i + 4), 2); dHash += Integer.toHexString(decimal); } return dHash; } // 计算dhash之间的汉明距离 private static int getHammingDistance(String dHash1, String dHash2) { int hammingDistance = 0; for (int i = 0; i < dHash1.length(); i++) { if (dHash1.charAt(i) != dHash2.charAt(i)) { hammingDistance++; } } return hammingDistance; } // 找出具有相似图片的文件,并将它们保存在Map<String, List<String>>中 public static Map<String, List<String>> findSimilarImages(List<File> fileList) { Map<String, List<String>> imageMap = new HashMap<>(); for (int i = 0; i < fileList.size(); i++) { File file1 = fileList.get(i); String dHash1 = getDHash(file1); List<String> similarImages = new ArrayList<>(); for (int j = i + 1; j < fileList.size(); j++) { File file2 = fileList.get(j); String dHash2 = getDHash(file2); int hammingDistance = getHammingDistance(dHash1, dHash2); if (hammingDistance <= THRESHOLD) { similarImages.add(file2.getAbsolutePath()); } } if (similarImages.size() > 0) { imageMap.put(file1.getAbsolutePath(), similarImages); } } return imageMap; } } ``` 使用方法: ```java List<File> fileList = new ArrayList<>(); fileList.add(new File("/path/to/image1.jpg")); fileList.add(new File("/path/to/image2.jpg")); fileList.add(new File("/path/to/image3.jpg")); Map<String, List<String>> imageMap = DHashAlgorithm.findSimilarImages(fileList); ``` 其中,fileList是包含所有图片文件的列表,imageMap是保存具有相似图片的文件的Map对象。如果两张图片的dhash之间的汉明距离小于等于THRESHOLD(默认为5),则认为它们是相似的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值