我正在尋找一個Java庫,它允許匹配一系列對象,可能與諸如hamcrest之類的匹配器相混合。在某些條件下匹配流
理想我想編寫一個測試,可以檢查一個迭代包含序列看起來像一個正則表達式,但對於對象,而不是字符串:
assertThat(myList).inSequence(oneOrMore(any()),zeroOrMore(equals(MyObject)));
的Mockito與驗證接近什麼我想,但一些簡單的匹配器丟失(如零或更多)
亞歷山大
我正在尋找一個Java庫,它允許匹配一系列對象,可能與諸如hamcrest之類的匹配器相混合。在某些條件下匹配流
理想我想編寫一個測試,可以檢查一個迭代包含序列看起來像一個正則表達式,但對於對象,而不是字符串:
assertThat(myList).inSequence(oneOrMore(any()),zeroOrMore(equals(MyObject)));
的Mockito與驗證接近什麼我想,但一些簡單的匹配器丟失(如零或更多)
亞歷山大
我能想到的是建立一個字符串,爲每個對象的一封信,然後用正則表達式像往常一樣簡單的解決方案。
public boolean matchObjects() {
Object a = new Object();
Object b = new Object();
Object c = new Object();
Object d = new Object();
ArrayList<Object> arrayList = new ArrayList<Object>();
arrayList.add(a);
arrayList.add(b);
arrayList.add(c);
arrayList.add(b);
arrayList.add(d);
Iterable<Object> iterable = arrayList;
String result = "";
for (Object object : iterable) {
if (object.equals(a))
result += "a";
else if (object.equals(b))
result += "b";
else if (object.equals(c))
result += "c";
else if (object.equals(d))
result += "d";
else
result += "x";
}
Pattern pattern = Pattern.compile("a.*b");
return pattern.matcher(result).find();
}
我想到了這一點,它會做的工作,但聽起來有點奇怪。感謝這個解決方案 – 2011-06-28 09:46:58
我覺得是什麼讓你的問題,從一個共同的正則表達式匹配不同的是,你沒有語言的字母,直到你得到的圖案。因此,你需要讀一次你的模式來建立語言字母表。根據你的解釋,我想有限的一組對象是你的語言基本要素。獲得語言符號列表後,您可以使用自己的正則表達式匹配實現,也可以將流和模式轉換爲字符串(通過將對象映射到字符)並使用可用的正則表達式API之一。
看看這個google project called ObjRegex。它聽起來像我認爲你正在尋找的。我真的對你的問題感興趣,因爲我在C#中實現了這樣的東西,但它是專有的,我無法分享它。
我還沒有嘗試lib,但它聽起來完全像我在找什麼!另一個可能的類比是CEP引擎中通常會發現的,比如[Esper](http://esper.codehaus.org/),用於對事件流進行查詢,這可能是您一直在研究的內容? – 2011-06-28 09:44:57
不確定爲什麼在regex下標記了這個標記。看起來像一個java問題給我。 – Mrchief 2011-06-25 03:55:01
這個問題是說正則表達式形式主義適用於一系列對象,而不是一系列字符。 – 2011-06-27 21:09:19