检查String是否包含List中的元素



我已经定义了如下列表

List<String> list = List.of("val1", "val2", "val3");
现在我有了下面的字符串
String myStr = "rel1,wel12,val1";

现在我需要检查字符串是否有列表中的任何一个元素(在上面的情况下,它是真的,因为它有val1,下一步是将该值转换为变量

我已经尝试了下面的工作,但我相信有一个更好的方法来做到这一点,使用任何集合库

List<String> list = List.of("val1", "val2", "val3");
String myStr = "rel1,wel12,val1";
String matchedStr =StringUtils.EMPTY;
String[] vals = myStr.split(",");
for(String val:vals) {
if(list.contains(val){
matchedStr=val;
break;
}
}

您可以使用Java Streams来获得第一个匹配的String:

Optional<String> result = Stream.of(vals).filter(list::contains).findFirst();

如果列表不是太大,你的方法是可以的。我也考虑字符串作为一个列表,因为它可以从你已经做过的分割它。你可以从较大的那个创建一个集合,并在较小的那个上迭代。

另一种方法是找到两个列表的交集。

List<String> list = Arrays.asList("red", "blue", "blue", "green", "red");
List<String> otherList = Arrays.asList("red", "green", "green", "yellow");

现在我们可以找到交点了:

Set<String> result = list.stream()
.distinct()
.filter(otherList::contains)
.collect(Collectors.toSet());

result应包含"红色"one_answers"green".

关于收集器的更多信息。

根据问题域中可能的值,可能不需要分割输入字符串。请给String#contains打电话。

如果是,你可以改变你的逻辑。不是在分割的部分上循环,而是在目标字符串列表上循环。对于列表中的每个字符串,询问未处理的输入字符串是否包含该元素。如果是,则跳出循环。

提示:如果此代码位于返回字符串的方法中,并且如果没有找到匹配则返回null,请了解如何返回Optional

我倾向于Zobayer的答案,或者使用List#retainAll

final List<String> first = List.of("one", "two", "three");
final List<String> out = new ArrayList<>(Arrays.asList("five,four,three".split(",")));
out.retainAll(first);

out包含单条目"three"

最新更新