【问题标题】:How to filter a list based on the content of another list of a different type?如何根据另一个不同类型列表的内容过滤列表?
【发布时间】:2011-09-27 13:21:55
【问题描述】:

我有两个列表:

  1. List<SomeObject> objectList;
  2. List<String> stringList;

SomeObject 有一个成员name,其类型为String。 检查stringList 是否包含不是objectList 中任何someObject 的名称的字符串的最佳方法是什么?

【问题讨论】:

    标签: java


    【解决方案1】:

    试试这个:

    public static boolean containsSameName()
    {
        for(String s : stringList)
        {
            for(SomeObject obj : objectList)
            {
                if(obj.getName().equals(s)) return true;
            }
        }
        return false;
    }
    

    【讨论】:

      【解决方案2】:

      遍历objectList 中的对象并将每个名称添加到Set<String>(我们称之为nameSet)。然后拨打nameSet.containsAll(stringList)

      【讨论】:

        【解决方案3】:

        使用集:

        HashSet<String> set = new HashSet<String>();
        for(SomeObject ob : objectList)
            set.add(ob.name);
        
         boolean ok = false;
         for(String name : stringList)
             if(!set.contains(name)){
                 ok = true;
                 break
         }
        

        //如果你的条件满足就ok了

        【讨论】:

          【解决方案4】:

          我建议用第一个列表中所有对象的名称构建一个Set&lt;String&gt;,然后对照该集合检查第二个列表。

          Set<String> set = new HashSet<String>();
          for (SomeObject o : objectList) {
              set.add(o.getName());
          }
          
          for (String s : stringList) {
              if (!set.contains(s)) {
                  ... // do whatever
                  break;
              }
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-11-07
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多