[英]Check if a String contains an element from a List
我已经定义了如下列表
List<String> list = List.of("val1", "val2", "val3");
现在我有以下字符串
String myStr = "rel1,wel12,val1";
现在我需要检查 String 是否有列表中的任何一个元素(在上述情况下,它是真的,因为它有val1
,接下来是将该值放入变量中
我已经尝试了以下方法并且它有效,但我确信使用任何 Collections 库有更好的方法来做到这一点
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 来获取匹配的第一个字符串:
Optional<String> result = Stream.of(vals).filter(list::contains).findFirst();
根据问题域中的可能值,可能不需要拆分输入字符串。 只需调用String#contains
。
如果是这样,你可以翻转你的逻辑。 不是在拆分部分上循环,而是在目标字符串列表上循环。 对于列表中的每个字符串,询问您未处理的输入字符串是否包含该元素。 如果是,则退出循环。
提示:如果此代码在返回字符串的方法中,并且如果未找到匹配项则返回 null,请了解如何返回Optional
。
如果列表不是太大,你的方式是好的。 我也将字符串视为一个列表,因为它可以像您已经完成的那样通过拆分它来制作。 您可以从较大的集合中创建一个集合,然后在较小的集合上进行迭代。
go 的另一种方法是找到两个列表的交集。
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
应包含“红色”和“绿色”。
我会赞成 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"
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.