Java如何处理多个返回值?

Kic*_*Son 2 java oop methods arraylist

我们假设我有一个Flight对象列表

public class Flight {
    private int passengers;
    private int price
    ...

    //getters and Setters
}

List<Flight> flightList = new ArrayList<Flight>();
Run Code Online (Sandbox Code Playgroud)

现在我需要累积每位乘客的价格和价格,因为我必须能够在以后进行这两种信息.所以我会创建两个方法:

public int calculatePrice(List<Flight> flightList) {
    int price = 0;
    for (Flight flight : flightList) {
        price = price + flight.getPrice();
    }
    return price;
}

public int calculatePricePerPassengers(List<Flight> flightList) {
    int pricePerPassenger = 0;
    for (Flight flight : flightList) {
        pricePerPassenger = (pricePerPassenger) + (flight.getPrice() / flight.getPassgers());
    }
    return pricePerPassenger;
}
Run Code Online (Sandbox Code Playgroud)

我有4-5种相同类型的方法.我不确定是否有太多冗余,因为我调用for循环4-5次,我可以轻松地在一个for循环中执行所有操作,但这会产生多个返回值的效果.这是适当的方式吗?(只是一个虚拟的例子)

Ami*_*era 5

您可以使用map,也可以扭曲要在类中返回的所有字段.这里我使用Map给出示例.

public static Map<String, Integer> calculatePrice(List<Flight> flightList) {
    Map<String, Integer> priceMap = new HashMap<>();
    int price = 0;
    int pricePerPassenger = 0;
    for (Flight flight : flightList) {
        price = price + flight.getPrice();
        pricePerPassenger = (pricePerPassenger) + (flight.getPrice() / flight.getPassgers());
    }
    priceMap.put("price", price);
    priceMap.put("pricePerPassenger", pricePerPassenger);
    return priceMap;
}
Run Code Online (Sandbox Code Playgroud)

编辑: 使用包装类(DTO)的示例.

    public static FligtPriceDTO calculatePrice(List<Flight> flightList) {
        FligtPriceDTO dto = new FligtPriceDTO();
        int price = 0;
        int pricePerPassenger = 0;
        for (Flight flight : flightList) {
            price = price + flight.getPrice();
            pricePerPassenger = (pricePerPassenger) + (flight.getPrice() / flight.getPassgers());
        }
        dto.setPrice(price);
        dto.setPricePerPassenger(pricePerPassenger);
        return dto;
    }
}

class FligtPriceDTO {
    private int price;
    private int pricePerPassenger;

    public int getPrice() {
        return price;
    }

    public void setPrice(int price) {
        this.price = price;
    }

    public int getPricePerPassenger() {
        return pricePerPassenger;
    }

    public void setPricePerPassenger(int pricePerPassenger) {
        this.pricePerPassenger = pricePerPassenger;
    }

}
Run Code Online (Sandbox Code Playgroud)

  • 虽然看似合理,但我建议使用更强类型的对象/ DTO (3认同)