我有两个字符串列表。 我想检查一个列表中的任何字符串在另一列表中是否可用。 使用了以下失败的方法。
请让我知道更好的方法
List<String> mylist = Arrays.asList(stringArray1);
List<String> items = Arrays.asList(stringArray2);
return mylist.stream().anyMatch(t->items.stream().anyMatch(t::contains));
答案 0 :(得分:6)
如果要查找mylist
中是否存在items
中的任何元素,可以首先将items
转换为Set
:
Set<String> setOfItems = new HashSet<>(items);
然后,您可以简单地遍历mylist
并检查setOfItems
中是否包含任何元素。
mylist.stream().anyMatch(setOfItems::contains);
这使您的O(n * k)
问题降到了O(n + k)
,其中n
和k
的大小分别为mylist
和items
。 / p>