如何根据另一个不同类型列表的内容过滤列表?

时间:2011-07-03 08:16:37

标签: java

我有两个清单:

  1. List<SomeObject> objectList;
  2. List<String> stringList;
  3. 虽然SomeObject的成员name的类型为String。 检查stringList是否包含 someObject中任何objectList的名称的字符串的最佳方法是什么?

4 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:3)

我建议使用第一个列表中所有对象的名称构建一个Set<String>,然后根据该集检查第二个列表。

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;
    }
}

答案 2 :(得分:0)

使用套装:

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
 }

//如果满足您的条件,则确定为真

答案 3 :(得分:0)

试试这个:

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