Java Collections使用正则表达式过滤元素

时间:2016-03-19 09:39:30

标签: java regex collections filter java-7

我正在寻找java API中是否有一个集合,我可以在其中检索以某些给定文本开头的元素。

例如,如果我在集合中有以下元素

abc
abbb
adf
abab
dfg
cfg

如果我输入“a”,那么它应该返回以字符“a”开头的所有元素。

2 个答案:

答案 0 :(得分:3)

您不需要正则表达式。在Java 8之前:

Collection<String> strings; // given this
String filter = "a";
for (Iterator<String> i = strings.iterator(); i.hasNext();)
    if (i.next().startsWith(filter))
        i.remove();

答案 1 :(得分:2)

没有任何集合可以为您提供开箱即用的过滤功能,但您可以执行简单的管道(需要Java 8):

filteredList = collection.stream()
                         .filter(e -> e.startsWith("a"))
                         .collect(Collectors.toList());

还有第三方库允许过滤集合:

链接的Javadoc描述确切地解释了每个方法如何进行过滤(即它是否修改了给定的集合,或者它返回了一个新的。)

或者只是简单地使用for循环(之前):

List<String> filteredList = new ArrayList<String>();
for(Iterator<String> iterator = collection.iterator(); iterator.hasNext();) {
    String str = iterator.next();
    if(str.startsWith("a")) {
        filteredList.add(str);
    }
 }