用for循环编写方法

时间:2017-10-18 17:16:20

标签: java for-loop set

我是Java的新手,我有一个建模问题。

我有一个名为CarRentalCompany的类,它包含一组Car对象。对于每个Car对象,都会关联一组Reservation对象。在Car类中,我有一个名为getAllReservations的方法,它将该汽车的所有预订作为Set返回。每个Reservation对象都有一个与之关联的carRenter,存储为String(只是一个名称)。因此,我在Reservation类中有一个方法getCarRenter,它返回一个String。

下面你可以找到我在CarRentalCompany类中编写的方法的代码,它通过renter name给出一组Reservation对象。

public Set<Reservation> getReservationsBy(String renter) {
    Set<Reservation> res = new HashSet<Reservation>();
    for(Car c : cars) {
        for(Reservation r : c.getAllReservations()) {
            if(r.getCarRenter().equals(renter))
                res.add(r);
        }
    }
    return res;
}

我现在的问题是:我如何在CarRentalCompany类中编写一个方法,该方法返回对该租赁公司进行最多预订的租用者名称?

该方法必须如下所示:

public String getBestCustomer(){
     ??
}

1 个答案:

答案 0 :(得分:0)

您可以使用Streams构建频率图并返回计数最高的频率图:

public String getBestCustomer() {
    return cars.stream()
            .map(Car::getAllReservations)
            .flatMap(Set::stream)
            .collect(Collectors.groupingBy(Reservation::getCarRenter, Collectors.counting()))
            .entrySet()
            .max(Map.Entry.comparingByValue())
            .map(Map.Entry::getKey)
            .orElse(null);
}