在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方法
答案 0 :(得分:5)
在equals()
旁边,您还需要覆盖hashCode()
方法。 distinct()
方法可能在内部使用一个集合,而这又需要正确实现的hashCode()
。更多info。
答案 1 :(得分:4)