2016-11-18 1 views
0

をソートは、私はEmployeeクラスと売りクラスを持っている2リスト上のオブジェクトと最大値によって

これを編集しました。
売り手は @ManyToOne 従業員との関係を持っています。

ベストセラーの売り手を検索するには、売り手による従業員リストの注文が必要ですが、売り手の数量も必要です。

私はこれを行うためにサービスクラスを作成しました。 私はリストを作成するための正しい豆を持っていますが、それは問題ではありません。問題は、関数から2つの異なるリストを取得する方法や、ベクトルなどを使用する方法がわからないことです。

私はこれを行う前に私自身の研究を行いましたが、知識がない、または全く理解できません。

従業員

package germanAcosta.electronicaDonPepe.dominio; 

import java.io.Serializable; 
import java.util.List; 

import javax.persistence.CascadeType; 
import javax.persistence.Entity; 
import javax.persistence.Id; 
import javax.persistence.ManyToMany; 
import javax.persistence.OneToMany; 

@SuppressWarnings("serial") 

@Entity 
public class Empleado implements Serializable{ 

@Id 
private Integer dni; 
private String password; 
private String nombre; 
private String apellido; 

@ManyToMany // 1 o + 
private List <Comision> comision; 

@OneToMany(cascade=CascadeType.ALL) 
private List <Premio> premio; 

private String tipo; 

public Empleado(){ 

} 

public Empleado(Integer dni, String password, String nombre, String apellido, List<Comision> comision, 
     List<Premio> premio, String tipo) { 
    super(); 
    this.dni = dni; 
    this.password = password; 
    this.nombre = nombre; 
    this.apellido = apellido; 
    this.comision = comision; 
    this.premio = premio; 
    this.tipo = tipo; 
} 

public Integer getDni() { 
    return dni; 
} 

public void setDni(Integer dni) { 
    this.dni = dni; 
} 

public String getPassword() { 
    return password; 
} 

public void setPassword(String password) { 
    this.password = password; 
} 

public String getNombre() { 
    return nombre; 
} 

public void setNombre(String nombre) { 
    this.nombre = nombre; 
} 

public String getApellido() { 
    return apellido; 
} 

public void setApellido(String apellido) { 
    this.apellido = apellido; 
} 

public List<Comision> getComision() { 
    return comision; 
} 

public void setComision(List<Comision> comision) { 
    this.comision = comision; 
} 

public List<Premio> getPremio() { 
    return premio; 
} 

public void setPremio(List<Premio> premio) { 
    this.premio = premio; 
} 

public String getTipo() { 
    return tipo; 
} 

public void setTipo(String tipo) { 
    this.tipo = tipo; 
} 
} 

売る事前に

package germanAcosta.electronicaDonPepe.dominio; 

import java.io.Serializable; 
import java.util.ArrayList; 
import java.util.Date; 
import java.util.List; 

import javax.persistence.CascadeType; 
import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import javax.persistence.Id; 
import javax.persistence.ManyToOne; 
import javax.persistence.OneToMany; 

@SuppressWarnings("serial") 

@Entity 
public class Venta implements Serializable { 

@Id 
@GeneratedValue 
private Integer numero_factura; 

@ManyToOne 
private Empleado empleado; 

@OneToMany(cascade = CascadeType.ALL) 
private List<Producto> productos = new ArrayList<Producto>(); 

private Date fechaDeIngreso; 

public Venta() { 

} 

public Venta(Integer numero_factura, Empleado empleado, List<Producto> productos, Date fechaDeIngreso) { 
    super(); 
    this.numero_factura = numero_factura; 
    this.empleado = empleado; 
    this.productos = productos; 
    this.fechaDeIngreso = fechaDeIngreso; 
} 

@Override 
public boolean equals(Object objeto) { 
    if (objeto == null) { 
     return false; 
    } 

    if (this == objeto) { 
     return true; 
    } 

    if (objeto instanceof Venta) { 
     Venta otraVenta = (Venta) objeto; 
     if (otraVenta.getNumero_factura() == this.numero_factura) { 
      return true; 
     } 
    } 

    return false; 
} 

public Integer getNumero_factura() { 
    return numero_factura; 
} 

public void setNumero_factura(Integer numero_factura) { 
    this.numero_factura = numero_factura; 
} 

public Empleado getEmpleado() { 
    return empleado; 
} 

public void setEmpleado(Empleado empleado) { 
    this.empleado = empleado; 
} 

public List<Producto> getProductos() { 
    return productos; 
} 

public void setProductos(List<Producto> productos) { 
    this.productos = productos; 
} 

public Date getFechaDeIngreso() { 
    return fechaDeIngreso; 
} 

public void setFechaDeIngreso(Date fechaDeIngreso) { 
    this.fechaDeIngreso = fechaDeIngreso; 
} 

} 

ありがとう:

は、私はいくつかのドメインのコードを置きます。

答えて

1

あなたは意見のサイズを並べ替えたくありません。

movies.sort(Comparator.comparingInt(movie -> movie.getOpinions().size()); 
+0

ご質問ありがとうございます。私は少し質問を変更しました。 –

+0

これはコードではなく、何が私を助けたのか、感謝しています。 –

0

あなたはドメインクラスのために、少なくとも実際のコードを投稿していない、しかし、あなたが探していることは、私は 従業員EMP = emList.streamを()推測です:あなたは意見のその大きさによって、映画をソートしたいです。 max((a、b) - > a.getSellList()。size() - b.getSellList()。size());

System.out.pritntf( "ベストセラー:%s、数量:%d"、emp.getName()、empty.getSellList()。size());

メジャー編集1: 私はドメインのアイデアを得た後、以下のように自分のコードを変更しています。自分のドメインクラス、つまりJPAではなくPOJOを使用しています。私はこのコードをテストし、うまく動作します。

package com.grs.stackOverFlow.pack02; 

import java.util.ArrayList; 
import java.util.List; 
import java.util.Map; 
import java.util.Map.Entry; 
import java.util.PrimitiveIterator.OfDouble; 
import java.util.stream.Collectors; 

public class Pack02Demo{ 

    public static void main(String []args){ 
     List<Sell> sells = Sell.createSampleSellList(10); 

     Map<Employee, List<Sell>> map = sells.stream().collect(Collectors.groupingBy(Sell::getEmp)); 

     System.out.println(map); 

     Employee som=null; 

     for(Entry<Employee, List<Sell>> entry: map.entrySet()){ 

      if(som==null){ 
       som=entry.getKey(); 
      }else{ 
       som=map.get(som).size()>entry.getValue().size()?som:(Employee) entry.getKey(); 
      } 

     } 

     System.out.printf("Seller of month id : %d , number of sells : %s",som.getId(),map.get(som).size()); 

    } 

} 

class Sell{ 
    private int id; 
    private Employee emp; 


    public int getId() { 
     return id; 
    } 

    public void setId(int id) { 
     this.id = id; 
    } 

    public Employee getEmp() { 
     return emp; 
    } 

    public void setEmp(Employee emp) { 
     this.emp = emp; 
    } 

    public String toString(){ 
     return String.format("{sell.id : %d, emp.id: %d %n }", id,emp.getId()); 
    } 

    public static List<Sell> createSampleSellList(int listSize){ 
     List<Employee> employees=Employee.createSampleEmpList(listSize); 
     List<Sell> sells=new ArrayList<>(listSize); 

     for(int i=1; i<=listSize; i++){ 
      int id= (int)(Math.random() * employees.size()-1); 
      Sell sell=new Sell(); 
      sell.setId(i); 
      sell.setEmp(employees.get(id)); 
      sells.add(sell); 
     } 

     return sells; 
    } 
} 

class Employee { 
    private Integer id; 

    public Integer getId() { 
     return id; 
    } 

    public void setId(Integer id) { 
     this.id = id; 
    } 

    public Employee(Integer id) { 
     super(); 
     this.id = id; 
    } 

    public String toString(){ 
     return String.format("{employee, id : %d }", id); 
    } 

    public boolean equals(Object object){ 
     if(object instanceof Employee){ 
      Employee emp=(Employee)object; 
      return this.id==emp.getId(); 
     } 
     else 
      return false; 
    } 


    public int hashCode(){ 
     return new Integer(id).toString().length(); 
    } 

    public static List<Employee> createSampleEmpList(int size){ 
     List<Employee> employees=new ArrayList<>(size); 

     for(int i=1; i<=size; i++){ 
      Employee employee=new Employee(i); 
      employees.add(employee); 
     } 
     return employees; 
    } 

} 
+0

これは私に少し説明できますか?私はコードを入れます。 –

+0

私は従業員のリストをストリームに変換し、各従業員の売り上げリストのサイズを比較して見つかった最大値を持っています。 – grsdev7

+0

ええ、今私はいくつかのコードを入れました。あなたが今見ることができるように、売り手が従業員を持っているので、売り手が従業員のIDでそれを保存するので、それは売り手です。 –

関連する問題