Java 8 Different()不调用equals方法

时间:2019-06-18 13:57:21

标签: java lambda java-stream

在Java 8中,distinct()中间操作状态的文档

  

返回由该流的不同元素组成的流(根据> Object.equals(Object))。   对于有序流,选择不同的元素是稳定的(对于重复的元素,该元素首先出现

但是没有被调用

我的商品类中的equals方法

@Override
public boolean equals(Object obj) {
    System.out.println(this.name+"<->"+((Item)obj).name);
    return this.name.equals(((Item)obj).name);
}

在数据类中定义数据

public static List<Item> getItemList(){     
    itemData.add(new Item("Orange","Citrus Fruit","Orange",30,true,false));
    itemData.add(new Item("Apple Green","Universal Fruit","Green",60,false,true));
    itemData.add(new Item("Papaya","Wonderful Fruit","Yellow",120,false,true));
    itemData.add(new Item("Papaya","Wonderful Fruit","Green",100,false,true));
    .
    .
    .
    itemData.add(new Item("Strawberry","Citrus Fruit","Red",25,true,false));
    itemData.add(new Item("Sapota","Brown Fruit","Brown",32,false,true));

    return itemData;
}

使用流

Data.getItemList().stream().distinct().forEach(System.out::println)

但是我意识到没有调用equals方法

2 个答案:

答案 0 :(得分:5)

equals()旁边,您还需要覆盖hashCode()方法。 distinct()方法可能在内部使用一个集合,而这又需要正确实现的hashCode()。更多info

答案 1 :(得分:4)

您还重写HashCode方法吗?

distinct无法重载。如果您想提供自定义逻辑进行比较,那么最好使用distinctBy API。

DistinctBy