gpt4 book ai didi

java - 检查 2D LinkedHashSet 是否包含特定字符串

转载 作者:行者123 更新时间:2023-12-02 01:10:19 30 4
gpt4 key购买 nike

我正在尝试查找是否在我创建的 2D LinkedHashSet 中找到特定字符串值。

以下是 LinkedHashSet 初始化的一些代码:

LinkedHashSet<LinkedHashSet<String>> block = new LinkedHashSet<LinkedHashSet<String>>();

我尝试过像这样使用 .contains 但它似乎是一个不正确的参数类型:

  int N = Integer.parseInt(b1.readLine());
for(int i = 0; i<N; i++) {
String sorts [] = (b1.readLine()).split(" ");
if(block.stream().anyMatch(list->list.contains(sorts[0]))) {
//System.out.println("I entered");
for (Set<String> innerSet : block) {
for (String string : innerSet) {
if(string.equals(sorts[0])) {
innerSet.add(sorts[5]);
}
if(string.equals(sorts[5])) {
innerSet.add(sorts[0]);
}
}
}
}
else {
block.add(new LinkedHashSet<String>(Arrays.asList(sorts[0], sorts[5])));
}

最佳答案

您可以使用parallelSteam使进程并发且快速 -

block.parallelStream()
.filter(stringSet ->
stringSet.contains(input))
.collect(Collectors.toList()).size() > 0

上面的代码取block ( LinkedHashSet<LinkedHashSet<String>> ) 和 input字符串。使用来自fork join pool的多个线程来查找不同集合中的输入字符串。最后,它收集所有包含输入字符串的此类集合,并检查大小是否大于 0,如果是这种情况,则返回 true,否则返回 false。

编辑1

better version这是-

block.parallelStream().anyMatch(strings -> strings.contains(input))

效率更高,因为它只会等待第一个匹配并立即返回 true。

anyMatch javadoc -

 * Returns whether any elements of this stream match the provided
* predicate. May not evaluate the predicate on all elements if not
* necessary for determining the result. If the stream is empty then
* {@code false} is returned and the predicate is not evaluated.

关于java - 检查 2D LinkedHashSet 是否包含特定字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59495108/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com