【问题标题】:How to find differences when comparing a String Array and HashMap?比较String Array和HashMap时如何发现差异?
【发布时间】:2016-12-08 15:17:17
【问题描述】:

我有一个这样的字符串数组:

String[] a={"Hi","Hello","Dear","Jungle"};

我有一个像这样的 HashMap:

Map<String, String> map=new HashMap<>();
map.put("Hi", "1");
map.put("Hello", "2");
map.put("Dear", "3");
map.put("Jungle", "4");
map.put("Sai", "5");
map.put("Surya", "6");

HashMap 是我比较的基础。 如果我们看到,字符串数组错过了两个字符串SAISURYA

我正在遍历 hashmap 并检查 String 数组,如下所示:

int c=0;
for(String key: map.keySet()){
    c=0;
    for (int i = 0; i < a.length; i++) {

        if(key.equals(a[i])){
            c++;
            System.out.println("App :"+ key+"present in DB , SO it is passed.");
        }               
    }
    if(c==0){
        System.out.println("App not present in DB, SO it might have failed");
    }
}

这是我的完整程序:

import java.util.HashMap;
import java.util.Map;


public class TestingApplication {

    public static void main(String[] args) {

        String[] a={"Hi","Hello","Dear","Jungle"};
        String[] status={"Passed","Passed","Passed","Passed"};

        Map<String, String> map=new HashMap<>();
        map.put("Hi", "1");
        map.put("Hello", "2");
        map.put("Dear", "3");
        map.put("Jungle", "4");
        map.put("Sai", "5");
        map.put("Surya", "6");
        int c=0;
        for(String key: map.keySet()){
            c=0;
            for (int i = 0; i < a.length; i++) {

                if(key.equals(a[i])){
                    c++;
                    System.out.println("App:"+ a[i]+" present in DB , SO it is passed.");
                }
            }
            if(c==0){
                System.out.println("App not present in DB, SO it might have failed");
            }
        }
    }
}

我的输出是:

App not present in DB, SO it might have failed
App:Hi present in DB , SO it is passed.
App:Dear present in DB , SO it is passed.
App:Hello present in DB , SO it is passed.
App:Jungle present in DB , SO it is passed.
App not present in DB, SO it might have failed

1.) 我们如何知道数组中缺少哪个 KEY? 2.) 我们如何将缺失的字符串添加到数组中?

编辑:我的问题不在于迭代 HashMap。 我的问题是关于如何找出差异并将它们存储回数据结构中。 如果您觉得如此,请阅读我的问题,然后将其标记为重复。

【问题讨论】:

  • @RafiduzzamanSonnet 遍历 HashMaps 不是我的问题。我想知道如何找到数据的差异。
  • if (c==0) {...} 表示数组中不存在key 对吧?因此,您知道数组中缺少哪个 KEY。这是你的第一个答案。为了将缺少的 KEY 添加到数组中,您可以将 String [] a 设为数组列表而不是数组。因此,如果您从一开始就将 a 设为数组列表,那么您可以在 if 条件下执行此操作:a.add(key)

标签: java arrays string hashmap


【解决方案1】:

您只需要更改代码中的少量内容,请尝试以下代码

 public class TestingApplication 
    {
        public static void main(String[] args) 
        {
            String[] a = { "Hi", "Hello", "Dear", "Jungle" };
            Map<String, String> map = new HashMap<>();
            map.put("Hi", "1");
            map.put("Hello", "2");
            map.put("Dear", "3");
            map.put("Jungle", "4");
            map.put("Sai", "5");
            map.put("Surya", "6");
            List<String> missedKeyList = new ArrayList<>();
            for (String key : map.keySet()) 
            {
                int c = 0;
                for (int i = 0; i < a.length; i++) 
                {
                    if (key.equals(a[i])) 
                    {
                        c++;
                        System.out.println("App: " + a[i] + " present in DB , So it is passed.");
                        break;
                    }
                }

                if (c == 0) 
                {
                    System.out.println("App: " + key + " not present in DB, So it might have failed");
                    missedKeyList.add(key);
                }
            }

            String[] allKey = Arrays.copyOfRange(a, 0, a.length + missedKeyList.size());
            int counter = a.length;
            for(String missedKey : missedKeyList)
            {
                allKey[counter] = missedKey;
                counter++;
            }
        }
    }

【讨论】:

    【解决方案2】:

    使用 Guava 库实现这一点非常简单,请参阅文档了解更多信息:https://github.com/google/guava/wiki/CollectionUtilitiesExplained

    使用 Java-8 功能,我打印它,但您可以对 itemsNotFoundInArray 进行迭代并添加到缺少项目的数组中。

    final Set<String> itemsFromArray = Sets.newHashSet(a);
    final Set<String> itemsFromMap= map.keySet();
    Sets.SetView<String> itemsNotInArray = Sets.difference(itemsFromMap, itemsFromArray);
    itemsNotInArray.forEach(System.out::println);
    

    【讨论】:

      【解决方案3】:

      首先,如果您想向数组中添加一些东西,那么您将需要动态数组,除非您事先创建了一个大尺寸的数组。 ArrayList 将是一个很好的候选者。然后,一旦你制作了一个 ArrayList,那么完成你的任务将需要 2 或 3 行代码。

          String[] staticArray = new String[] { "Hi","Hello","Dear","Jungle"};
          ArrayList myList = Arrays.asList(staticArray);
          for(String key: map.keySet()){
          if(!myList.contains(key){
               myList.add(key);    
            }
          }
      

      【讨论】:

        猜你喜欢
        • 2017-08-30
        • 2011-02-02
        • 1970-01-01
        • 2011-12-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多