繁体   English   中英

检查字符串是否包含列表中的元素

[英]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"

检查一个列表<string>包含列表中的所有元素<object>使用 stream<div id="text_translate"><p> 我有 2 个列表:</p><pre> List<String> authorizedList; // ["11","22","33"] List<MySerial> serials; // [Myserial1,Myserial2,Myserial3] =></pre><p> MySerial 是 object,有 2 个参数,Myserial(String serial, String name)</p><p> 我想使用 stream 检查是否所有来自连续剧的连续剧都在 authorizedList 中,但我是新手。</p><pre> if (.serials.stream():map(MySerial:.getSerial):anyMatch(authorizedList:;equals)) { throw new UnauthorizedException(); }</pre><p> 但它总是抛出异常。</p></div></object></string>

[英]Check if a List<String> contains all element from a List<Object> using stream

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM