如何在Java中实现多对多关系?

时间:2018-12-30 18:10:56

标签: java

我正在研究一个项目,该项目根据参加者的工作时间来计算参加聚会的志愿者的费用。

以下是正确的:

  
      
  • 员工可以在多方工作
  •   
  • 一个聚会有很多员工
  •   
  • 员工可以选择在特定聚会上工作多少小时。
  •   

例如:人员A决定在甲方工作4小时,在乙方工作5小时,人员B决定在甲方工作3小时,在乙方工作6小时。 -知道有多少员工参加聚会很重要,因为预算将在员工之间分配。

我想计算给定方的每位志愿者的费用 我怎么知道谁在哪个聚会上工作了几个小时? 我认为我现在编写的代码不是最佳选择,因为对象被存储两次。如果我删除了Party类的雇员列表,我怎么知道有多少雇员在党工作?

public class Party {

private List<employee> employees;    
//other attributes

//methods
}

public class Employee {

private List<Hours> hours;    
// other attributes

//methods
}

public class Hours{

private Party party;    
private double hours;    
//other attributes

//methods
}

2 个答案:

答案 0 :(得分:1)

定义代表关系的类

class Employment{
    private Party party;
    private Employee employee;
    private Hours hours;

    // ...
}

创建工作清单

List<Employment> employments;

答案 1 :(得分:0)

我不明白为什么您需要在Party和Employee之间使用双重引用,并且Hour类似乎代表了这种关系

public class Party {}

public class Employee {
    private List<Hours> hours;    
    public void addWork(Party party, int hours) {
        hours.add(new Hour(party, hours));
    }
}

public class Hours{
    private Party party;    
    private double hours;    
}

以上是您的基本数据类,但是您还需要一些控制器类,您可以在其中创建新员工和聚会等。在此类中,典型的是您将列出所有员工,例如获取所有在特定聚会上工作的小时数,您可以给一个清单employees和一个聚会p

List<Hours> hoursWorked = employess.stream().flatMap(e -> e.hours.stream()).filter(h->h.getParty().equals(p)).collect(Collectors.toList());