lambdajとString.matchesメソッドを使用してCollection<String>
をフィルタリングする方法
私はlambdajに新しく、与えられた例がこれより複雑であるので、ダムを感じていません。lambdajとString.matchesメソッドの使用
3
A
答えて
1
これはうまくいきますが、単純なforループを置き換えるのにこのコードが多くかかることは不幸です。 "select"よりも "filter"を好む理由は、コードが簡単で読みやすいと思うからです。
public Collection<String> search(String regex) {
List<String> matches = filter(matches(regex), dictionary);
return matches;
}
static class MatchesMatcher extends TypeSafeMatcher<String> {
private String regex;
MatchesMatcher(String regex) {
this.regex = regex;
}
@Override
public boolean matchesSafely(String string) {
return string.matches(regex);
}
public void describeTo(Description description) {
description.appendText("matches " + regex);
}
}
@Factory
public static Matcher<String> matches(String regex) {
return new MatchesMatcher(regex);
}
1
あなたは以下に述べるように、あなたが行うことができますコレクションをフィルタリングする場合:
@Test
public void test() {
Collection<String> collection = new ArrayList<String>();
collection.add("foo");
collection.add("bar");
collection.add("foo");
List<String> filtered = select(collection, having(on(String.class), equalTo("foo")));
assertEquals(2, filtered.size());
}
+0
おかげで...私は、私は信じられない思いでまだ思うよ1.構文はhamcrestには正規表現マッチャはないようであるので、私は、ブートするために私自身のマッチャーを記述する必要がありそう冗長と2であること。 – wytten
2
それはhaving(on(...))
構文を使用してそれを行うことは可能だった場合、呼び出しは次のようになります。
select(collection, having(on(String.class).matches("f*")))
しかし、残念ながらString
クラスがfinalであり、on(String.class)
がhaving
マッチャーで必要なプロキシを作成できないため、残念ながらそれは不可能です。
hamcrestは正規表現マッチャーを持ちませんが、自分で書く必要はありません。ネットはいくつかの実装を提供します。私は、ソースコードをコピーするのではなく、すぐに使える公立図書館でそのようなマッチャーを見たいと思います。
関連する問題
- 1. JavaでのString.matches()の使用
- 2. DOTALL for String.matches()
- 3. lambdajとJavaの複数のソート条件
- 4. lambdajを使用してリストの上位3項目を選択
- 5. 簡易選択メソッド(lambdaj)が例外を取得
- 6. lambdajでこのループを回避することができますどのようにLambdaj
- 7. lambdajの実際の紹介ですか?
- 8. 次の繰り返し用のlambdajコードは何ですか
- 9. JavaのString.matchesと正規表現またはパイプ
- 10. LambdaJインデックスの代わりにJavaストリーム
- 11. フラット化リストによるLambdajグループ
- 12. 最初の文字を 'K'で始めるためのString.matches
- 13. Javaのstring.matches()メソッドで同じ値を2回一致させないようにしてください。
- 14. 配列のSetValueメソッドと[]インデクサの使用
- 15. jqueryのelse文と.hover()メソッドの使用
- 16. JEditorPaneとそのsetPageメソッドの使用
- 17. ジェネリックスとJPA EntityManagerメソッドの使用
- 18. 関数と静的メソッドの使用
- 19. @XmlAnyAttributeとメソッドのバグ? (JAXB RIを使用)
- 20. ヘルパークラスと非静的メソッドの静的メソッドの使用
- 21. get-WMIObjectメソッドとinterrogateserviceメソッドでの変数参照の使用
- 22. System.Diagnostics.PresentationTraceSources.SetTraceLevel()メソッドの使用
- 23. sys.stdout.flush()メソッドの使用
- 24. 2つのArrayListをlambdajでマップしますか?
- 25. Java regex String.matchesは一貫して動作しません
- 26. C#でparamsと拡張メソッドを使用
- 27. メソッドとパラメータアノテーションを使用するSpring AOP
- 28. macruby:AXObserverCallbackとしてrubyメソッドを使用
- 29. メソッドとオブジェクトを使用する場合
- 30. RecyclerViewとメソッドでCountDownTimersを使用する
さて、それは多くのコード* once *が必要です。私は私のユニットテストライブラリに正規表現マッチャーを追加しましたので、再度書き込む必要はありません。プロダクションコードでマッチャーを使用する場合は、正規表現マッチャーを適切なライブラリーに移動します。私の答えに書かれているように、私はすぐに使える公共図書館にこのマッチャーを見たいと思います。 –