ArrayList <String> list = new ArrayList();
list.add("behold");
list.add("bend");
list.add("bet");
list.add("bear");
list.add("beat");
list.add("become");
list.add("begin");
有一种方法可以搜索正则表达式bea.* 并获得索引,就像ArrayList.indexOf?
编辑:返回的项目是好的,但我需要的东西与更多的性能比线性搜索
8条答案
按热度按时间omjgkv6w1#
Herms基本上是正确的。如果你想要String而不是索引,那么你可以通过使用Java 5 foreach循环来改进:
8aqjt8rx2#
有内置的方法吗?据我所知没有。但是,自己做应该很容易。下面是一些完全未经测试的代码,应该给予你基本的想法:
我可能对Pattern和ListIterator部分的用法有一点错误(我从来没有使用过这两个部分),但这应该给予了基本的想法。
vybvopom3#
一种选择是使用Apache Commons CollectionUtils“select”方法。您需要创建一个Predicate对象(具有单个“evaluate”方法的对象,该方法使用正则表达式检查匹配并返回true或false),然后您可以在列表中搜索匹配的项。但是,它不会返回索引,它将返回包含项本身的集合。
mo49yndu4#
这是Guava中的一条线:
mum43rcc5#
我不相信有一个Java API的方法来做这件事,也没有一个Apache Commons的方法来做这件事。
cyvaqqii6#
这将是一个线程复兴,但可能对某些人有用。你可能不需要索引,可能下一步会对匹配正则表达式的项目做一些事情,因此你要求索引。但你可以使用Java8流和lambda表达式:
你可以获取原始列表,将其转换为流,在其上运行一个过滤器,该过滤器运行lambda来匹配你的模式,并将其转换回列表。但你可以将其保持为流,并使用另一个lambda表达式在其上运行.foreach。
u4vypkhs7#
当我们讨论大型列表时,将它们与Java8内置函数并行传输是有意义的。
irlmq6kh8#
这里是一个线性复杂度的答案,使用一个简单的for循环,它让你可以选择返回索引或单词!
如前所述,除非您知道列表的排序,否则无法比线性搜索做得更好,