我有三节课。 Main.java
,Producto.java
和Supermercado.java
。
Main.java
包含主要内容。Producto.java
我要在列表中打印的产品结构。Supermercado.java
是一个Singleton模式,代表我的List所在的超市。我只会向你们展示我认为与问题相关的代码,如果您需要更多信息,请不要犹豫。
Main.java
// Instanciar productos
Producto p1 = new Producto("Sal 100gr", LocalDate.now(), 0.5f, 1);
Producto p2 = new Producto("Pimienta 25gr", LocalDate.now(), 0.2f, 1);
Producto p3 = new Producto("Sal 1kg", LocalDate.now(), 2, 1);
Producto p4 = new Producto("Te limón", LocalDate.now(), 3.5f, 2);
Producto p5 = new Producto("Azucar 1kg", LocalDate.now(), 2, 1);
Producto p6 = new Producto("Azucar 5kg", LocalDate.now(), 10, 1);
Producto p7 = new Producto("Xilitol 1kg", LocalDate.now(), 15, 1);
Producto p8 = new Producto("Xilitol 1kg", LocalDate.now(), 15, 1);
// Añadir productos a la lista del super
Supermercado.getSupermercado().addProducto(p1);
Supermercado.getSupermercado().addProducto(p2);
Supermercado.getSupermercado().addProducto(p3);
Supermercado.getSupermercado().addProducto(p4);
Supermercado.getSupermercado().addProducto(p5);
Supermercado.getSupermercado().addProducto(p6);
Supermercado.getSupermercado().addProducto(p7);
Supermercado.getSupermercado().addProducto(p8);
// Printing the list
System.out.println("\nLista productos.");
Supermercado.getSupermercado().printListaProductos();
// Printing distinct items (do not repeat xilitol plz)
System.out.println("\nLista de productos sin repetir.");
Supermercado.getSupermercado().printListaProductosSinRepetir();
Supermercado.java
// Printing the list
public void printListaProductos() {
listaProducto.stream()
.forEach(p -> System.out.println("Producto " +p.getNombre()
+ '\t' + "Precio " + p.getPrecio() + "€"
+ '\t' + "Caducidad " + p.getFechaCaducidad()));
}
// Printing distinct items (do not repeat xilitol plz)
public void printListaProductosSinRepetir() {
listaProducto.stream()
.distinct()
.forEach(p -> System.out.println("Producto " +p.getNombre()
+ '\t' + "Precio " + p.getPrecio() + "€"
+ '\t' + "Caducidad " + p.getFechaCaducidad()));
}
Producto.java
private String nombre;
private int seccion;
private LocalDate fechaCaducidad;
private float precio;
// constructor
public Producto(String pNombre, LocalDate pFechaCaducidad, float pPrecio, int pSeccion) {
this.nombre = pNombre;
this.fechaCaducidad = pFechaCaducidad;
this.precio = pPrecio;
this.seccion = pSeccion;
}
public LocalDate getFechaCaducidad() {
return this.fechaCaducidad;
}
public float getPrecio() {
return this.precio;
}
public int getSeccion() {
return this.seccion;
}
public String getNombre() {
return this.nombre;
}
Lista productos.
Producto Sal 100gr Precio 0.5€ Caducidad 2016-05-27
Producto Pimienta 25gr Precio 0.2€ Caducidad 2016-05-27
Producto Sal 1kg Precio 2.0€ Caducidad 2016-05-27
Producto Te limón Precio 3.5€ Caducidad 2016-05-27
Producto Azucar 1kg Precio 2.0€ Caducidad 2016-05-27
Producto Azucar 5kg Precio 10.0€ Caducidad 2016-05-27
Producto Xilitol 1kg Precio 15.0€ Caducidad 2016-05-27
Producto Xilitol 1kg Precio 15.0€ Caducidad 2016-05-27
Lista de productos sin repetir.
Producto Sal 100gr Precio 0.5€ Caducidad 2016-05-27
Producto Pimienta 25gr Precio 0.2€ Caducidad 2016-05-27
Producto Sal 1kg Precio 2.0€ Caducidad 2016-05-27
Producto Te limón Precio 3.5€ Caducidad 2016-05-27
Producto Azucar 1kg Precio 2.0€ Caducidad 2016-05-27
Producto Azucar 5kg Precio 10.0€ Caducidad 2016-05-27
Producto Xilitol 1kg Precio 15.0€ Caducidad 2016-05-27
Producto Xilitol 1kg Precio 15.0€ Caducidad 2016-05-27
显然,.distinct()
方法中的printListaProductosSinRepetir()
代码对我不起作用。它应该显示:
Lista de productos sin repetir.
Producto Sal 100gr Precio 0.5€ Caducidad 2016-05-27
Producto Pimienta 25gr Precio 0.2€ Caducidad 2016-05-27
Producto Sal 1kg Precio 2.0€ Caducidad 2016-05-27
Producto Te limón Precio 3.5€ Caducidad 2016-05-27
Producto Azucar 1kg Precio 2.0€ Caducidad 2016-05-27
Producto Azucar 5kg Precio 10.0€ Caducidad 2016-05-27
Producto Xilitol 1kg Precio 15.0€ Caducidad 2016-05-27
没有额外的Xilitol 1kg
。这些项目不应重复。
我正在尝试了解Java 8
如何与Lambda-expressions
一起使用。所以我为此建立了一些例子。问题是.distinct()
无效。我在SO中找不到这个解决方案。提前谢谢。
答案 0 :(得分:3)
您应该覆盖equals
类中的hashCode
和object
方法,以便在此处开展此工作是一个示例。
在Producto.java
添加以下代码。
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((nombre == null) ? 0 : nombre.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Producto other = (Producto) obj;
if (nombre == null) {
if (other.nombre != null)
return false;
} else if (!nombre.equals(other.nombre))
return false;
return true;
}
答案 1 :(得分:1)
您应该覆盖equal
Producto
功能
distinct()
函数会删除重复的元素,具体取决于
对象的equal()
如果不覆盖equal()
函数,则默认行为是与对象引用地址进行比较