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