我有兩個集合,它們都由相同類型的對象組成,這種類型的對象有一個字段,在本例中爲'codeType'。使用新的Java 8 API流和lambda表達式檢查兩個集合
我需要檢查在第二個集合中,所有'codeTypes'與第一個集合中的相同,沒有額外添加。我可以這樣做,只是迭代兩個集合以獲取id,然後檢查它們。 但是當我們使用的是Java 8,我想用流和lambda表達式(因爲我學習吧)
這是迄今爲止我所做的一切它做的事:
Boolean collectionEquals = CollectionUtils.isNotEmpty(oldOrderPositions)
? oldOrderPositions.stream()
.mapToLong(oldPosition ->
oldPosition.getCodeType().getId())
.allMatch(newOrderPositions.stream()
.mapToLong(newPosition ->
newPosition.getCodeType().getId()))
: false;
基本上我獲取兩個集合,我遍歷它們以獲取Id,然後檢查所有id的匹配。然而,我收到一個編譯錯誤,說「LongMream中的allMatch(java.util.fuction.Predicate)不能應用於(java.util.stream.LongStream)」
你能幫我嗎?我不知道我在做什麼錯,或者我在誤會。
謝謝您的時間
我覺得你正在重塑車輪..請使用這樣的Google guava項目之一http://docs.guava-libraries.googlecode.com/git-history/release/javadoc/com/google/common/ collect/Iterables.html#elementsEqual(java.lang.Iterable,java.lang.Iterable) – rakpan 2015-03-13 10:55:14
@FirstX爲什麼他應該爲這個簡單的問題使用一個庫? – dit 2015-03-13 11:01:27
@dit因爲它不是**「簡單的問題」。這是一個不平凡的比較操作,並且流並不適合這種情況。使用一個庫來完成你想要的(和正確的)是最好的創建一個DIY竊聽效用方法 – Vogel612 2015-03-13 11:13:12