2010-07-12 78 views
1

在我的列表中,我想忽略某些条目(创建列表过滤器),通过忽略我的意思是删除。如果我的列表包含A到Z字符串元素,假设我想删除B,F和Z.如何创建列表过滤器

我该如何做到这一点与var args,要从列表中删除任意数量的元素?

谢谢

回答

6

您可以使用List#removeAll()

List<String> alphabet = new ArrayList<String>(); 
alphabet.add("A"); 
alphabet.add("B"); 
alphabet.add("C"); 
alphabet.add("D"); 
alphabet.add("E"); 
alphabet.add("F"); 
alphabet.add("G"); 
// Etc.. 
List<String> toRemove = Arrays.asList("B", "F"); // Takes varargs! 

alphabet.removeAll(toRemove); 

System.out.println(alphabet); // A, C, D, E, G 
+0

什么新的ArrayList (asList( “A”, “B” 建设的字母.. 。))? (副本不贵),或者如果你可以使用番石榴Lists.newArrayList(“A”,“B”,...) – 2010-07-12 13:34:56

+1

@Sylvian:这取决于OP。问题不在于建设。只要没有明确提到,就会假设标准的Java SE API。诚然,番石榴很棒,但我无法从头顶回答基于番石榴的解决方案。只要给出/指出合理的基于Java SE API的答案,您就可以自由地这样做。 OP可能有理由不使用/偏好“第三方”API。 – BalusC 2010-07-12 13:36:29

+0

好吧,我明白你的观点,谢谢你的解释。下一次我回答这个问题时,我首先会考虑用标准API(除非提到) – 2010-07-12 13:44:04

1

快速猜测(使用可变参数):

void removeFromList(List<Object> list, Object ... filterElements){ 
    for(Object elm:filterElements){ 
    while(list.remove(elm)); 
    } 
} 
3

使用番石榴

final Iterable<String> filtered = Iterables.removeIf(asList("A","B","C", "Z"), new Predicate<String>(){ 
    public boolean apply(final String element){ 
     // your filter, eg 
     return element.equals("A"); 
    ) 
} 
+0

'contains'应该是关于这个问题的“equals”。 – whiskeysierra 2010-07-13 09:29:21

+0

@威利:thx,修正完成 – 2010-07-13 09:56:05