[英]Remove a character from every item of a list in JAVA
我有一個像這樣的字符串"-FOREST&-JUNGLE&DESERT"
此字符串在列表中拆分為單詞,如下所示: [-FOREST, -JUNGLE ,DESERT]
List<String> pattern = Arrays.asList(s.split("\\\\s*&\\\\s*"));
每個開頭帶減號的單詞都必須在一個新列表中,每個單詞都必須在另一個列表中,如下所示:
List<String> allowedtags = pattern
.stream()
.filter(name -> !name.startsWith("-"))
.collect(Collectors.toList());
List<String> unwantedtags = pattern
.stream()
.filter(name -> name.startsWith("-"))
.collect(Collectors.toList());
我的問題是我unwantedtags
的標簽在開頭保留帶有減號的單詞,但是對於我的所有操作,我需要擺脫它。 如果我做下面的例子中,如果“林”是它不會工作taglist
作為我unwantedtags
包含“-Forest”。
if (taglist.stream().anyMatch(unwantedtags::contains)) {
return !IsWhitelist;
}
那么如何修復我不需要的標簽列表呢? 也許在java 8流api中? 此外,我覺得一方面它在這一點上工作得很好,但另一方面我覺得這是很多代碼來獲取兩個列表。 可以優化嗎?
您可以映射每個元素以在檢測到它后去掉前導減號:
List<String> unwantedtags = pattern
.stream()
.filter(name -> name.startsWith("-"))
.map(name -> name.substring(1))
.collect(Collectors.toList());
通過顯式構造和填充列表,可以使代碼更加高效。 然后您可以一次處理pattern
而不是兩次:
List<String> allowedtags = new ArrayList();
List<String> unwantedtags = new ArrayList();
pattern.stream()
.forEach(name -> {
if (name.startsWith("-")) unwantedtags.add(name.substring(1));
else allowedtags.add(name);
}
);
您缺少一個操作。 使用 map() 運算符,您可以獲取輸入字符串並對其進行修改。
List<String> unwantedtags = pattern
.stream()
.filter(name -> name.startsWith("-"))
.map(name -> name.substring(1))
.collect(Collectors.toList());
您可以使用groupingBy
來划分此集合(按name.startsWith("-")
):
Map<Boolean, List<String>> collect = pattern.stream()
.collect(Collectors.groupingBy(name -> name.startsWith("-")));
然后你有:
{false=[DESERT], true=[-FOREST, -JUNGLE]}
之后,您可以進行進一步處理(使用unwantedtags
):
List<String> unwantedtags = collect
.getOrDefault(true, List.of()).stream()
.map(name -> name.substring(1))
.collect(Collectors.toList());
或者您可以在一個流中完成,但它看起來可能更復雜。
Map<Boolean, List<String>> collectWithMap = pattern.stream()
.collect(Collectors.groupingBy(name -> name.startsWith("-"),
Collectors.mapping(name -> name.startsWith("-") ? name.substring(1) : name,
Collectors.toList())));
結果:
{false=[DESERT], true=[FOREST, JUNGLE]}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.