我正在阅读一本关于Java8的书,其中解释了不同的流。有人提到,为了产生不同的要素,平等是由hashCode()
&的实施决定的。 equals()
方法。
因此,我编写了以下代码以便用例子来理解:
static class Order{
public Order(int id,Double value){
this.id = id;
this.value = value;
}
int id;
Double value;
@Override
public int hashCode() {
System.out.println("In Hashcode() - " + this.id +","+this.value);
return this.id;
}
@Override
public boolean equals(Object o){
System.out.println("In Equals()");
return this.id == ((Order)o).id;
}
}
public static void main(String[] args) {
Stream<Order> orderList = Stream.of(new Order(1,10.0),new Order(2,140.5),new Order(2,100.8));
Stream<Order> biggerOrders = orderList.filter(o->o.value > 75.0);
biggerOrders.distinct().forEach(o->System.out.println("OrderId:"+ o.id));
}
它产生了以下输出:
In Hashcode() - 2,140.5
In Hashcode() - 2,140.5
OrderId:2
In Hashcode() - 2,100.8
In Equals()
我很困惑为什么hashCode方法在同一个Order对象上(2,140.5) 在将其与另一个订单对象(2,100.8)进行比较之前调用两次。
提前致谢。