簡體   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