Ich habe den folgenden Code:Strom und die deutliche Operation
class C
{
String n;
C(String n)
{
this.n = n;
}
public String getN() { return n; }
@Override
public boolean equals(Object obj)
{
return this.getN().equals(((C)obj).getN());
}
}
List<C> cc = Arrays.asList(new C("ONE"), new C("TWO"), new C("ONE"));
System.out.println(cc.parallelStream().distinct().count());
aber ich verstehe nicht, warum distinct
kehrt 3 und 2 nicht
Aha, du bist mit Java 8. Versuchen experimentieren überschreibt auch 'hashCode()' in der Klasse 'C'. Wenn zwei C-Objekte gleich sind, müssen ihre Hash-Codes gleich sein. – Jesper
Setzen Sie einen Haltepunkt innerhalb des überlagerten 'equals' und sehen Sie, ob' distinct' es betrachtet. –
@Jesper, ich sah keine Sorge um 'Hashcode' in Dokumenten unter http://download.java.net/jdk8/docs/api/java/util/stream/Stream.html#Distinct-- –