首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >java中字典的迭代

java中字典的迭代
EN

Stack Overflow用户
提问于 2016-02-25 18:20:41
回答 1查看 182关注 0票数 0

我在接口中保存了大量数据(确切地说是55个)。加在一起,它们在字符串数组中包含近170000个字符串。

我想要做的是将输入元素与给定接口中的字符串进行匹配,并返回与输入元素的模式匹配的所有元素。

我已经将元素保存在字符串数组中,例如。

代码语言:javascript
运行
复制
String[] array = {"element 1", "element 2".....};

对于每个输入,我必须遍历整个字符串数组,以便在列表中找到所有匹配的元素。

我目前正在这样做:

代码语言:javascript
运行
复制
for(int innerIterator = 0; innerIterator < dictionaryArrayLength; innerIterator++){
            if (dictionaryArray[innerIterator].matches(""+input[iterator]+"\\D*")) {
                matchedWordList.add(dictionaryArray[innerIterator]);
            }
        } 

因为数组的长度是以千为单位的,所以需要一点时间来回答。

我希望这段代码能运行得更好。我目前正在考虑改变我在字典中使用的数据结构。但是有没有更好的方法来遍历列表并找到所有匹配的元素呢

EN

回答 1

Stack Overflow用户

发布于 2016-02-25 19:11:13

如果您使用的是Java 8,您可以尝试使用新的Stream api:

代码语言:javascript
运行
复制
Pattern inputPatter = Pattern.compile(input[iterator] + "\\D*");
List<String> matchingWords = Arrays.stream(dictionaryArray).parallel()
        .filter(word -> inputPatter.matcher(word).matches()).collect(Collectors.toList());
matchedWordList.addAll(matchingWords);

使用第一行(Pattern inputPatter = Pattern.compile(input[iterator] + "\\D*");)可以避免

在每次循环迭代时创建正则表达式字符串,在每次迭代时创建相对模式对象(参见String.matches)的源代码

  1. the creation of the relative Pattern object

使用Arrays.stream,您可以从数组创建流。

使用.parallel,您可以并行化数据流,以便在多个线程之间分配以下操作(对于庞大的数据集,它可以显着提高性能)。

使用.filter(word -> inputPatter.matcher(word).matches()),您只需选择与您的模式匹配的单词。

使用.collect(Collectors.toList()),您可以将结果收集到一个列表中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35624466

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档