エリック・シュタイナー:
私はこのような文字列が持っている"-FOREST&-JUNGLE&DESERT"
この文字列は、そのようなリスト内の単語に分割されています。[-FOREST, -JUNGLE ,DESERT]
List<String> pattern = Arrays.asList(s.split("\\s*&\\s*"));
先頭にマイナスとすべての単語は、そのような別ではなく、1つの新しいリストとすべての単語でなければなりません。
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
先頭にマイナスと言葉を続けたが、私のすべての操作のために、私はそれを取り除く必要があります。私は以下の例を行う場合は、「FORESTは」である場合、それは動作しませんtaglist
、私のようにunwantedtags
「-FOREST」が含まれています。
if (taglist.stream().anyMatch(unwantedtags::contains)) {
return !IsWhitelist;
}
だから、どのように私は私のunwantedtagsリストを修正できますか?たぶんJavaの8ストリームAPIの?さらに私は、一方で、それはその時点まで正常に動作していることを感じているが、一方で私は、これはちょうど2つのリストを取得するためのコードの多くがあることを感覚を得ます。それを最適化することができますか?
テッド・ジャンプ:
あなたはそれが検出された後に先頭にマイナス記号を取り除くために、各要素をマッピングすることができます。
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);
}
);