我有一個Element
對象流,我需要根據相等性進行過濾。這似乎很容易與.distinct()
但我得到異常的結果。即使對象返回相等,它們也不會被.distinct()
過濾。未被Stream.distinct過濾的等效對象()
我錯過了什麼?下面證明 -
List<Element> elements = getStream().filter(e -> e.getName().equals("userId")).collect(Collectors.toList());
System.out.println("Elements with same name: " + elements.size());
if(elements.size() > 1) {
System.out.println("Equals?: " + elements.get(0).equals(elements.get(1)));
}
System.out.println("Distinct Elements: " + getStream().distinct().count());
System.out.println("Full Elements: " + getStream().count());
輸出:
Elements with same name: 2
Equals?: true
Distinct Elements: 8
Full Elements: 8
貴'Element'類覆蓋'equals'? – k0ner
是的。我正在使用Apache EqualsBuilder。它確實返回正確,如上所示。 (Object obj){ if(obj == null){ return false; } if(obj == this){ return true; (obj.getClass()!= getClass()){ }返回false; } Element other =(Element)obj; 返回新的EqualsBuilder()。append(getName(),other.getName())。isEquals(); } – mkeathley
也 - 如果您運行此代碼,將會得到'IllegalStateException'。 'collect'方法是終端操作 – k0ner