首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java如何处理多个返回值?

Java如何处理多个返回值?
EN

Stack Overflow用户
提问于 2018-02-07 17:26:23
回答 3查看 277关注 0票数 2

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

代码语言:javascript
复制
public class Flight {
    private int passengers;
    private int price
    ...

    //getters and Setters
}

List<Flight> flightList = new ArrayList<Flight>();

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

代码语言:javascript
复制
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;
}

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-02-07 17:37:43

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

代码语言:javascript
复制
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;
}

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

代码语言:javascript
复制
    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;
    }

}
票数 5
EN

Stack Overflow用户

发布于 2018-02-07 18:01:27

您可以将这两个值包装到一个新数组中:

代码语言:javascript
复制
public int[] calculatePrices(List<Flight> flightList) {

    int totalPrice = 0;
    int pricePerCustomer = 0;

    for (Flight flight : flightList) {
        totalPrice += flight.getPrice();
        pricePerCustomer += (flight.getPrice() / flight.getPassgers());
    }

    return new int[] { totalPrice, pricePerCustomer };
}
票数 1
EN

Stack Overflow用户

发布于 2018-02-07 18:30:15

这一切归结为您想要提供给用户的功能。因此,如果用户希望能够单独计算这两种价格,那么我看不出有什么别的办法。但是,如果您可以同时提出两个价格,那么您可以消除其中一个方法,只循环一次通过您的飞行列表,并返回两个价格的组合。例:

代码语言:javascript
复制
public static Pair[] calculatePrices(List<Flight> flightList)
{
     int pricePerFlight= 0;
     int pricePerPassenger = 0;
     for(Flight flight : flightList)
    {
       pricePerFlight = pricePerFlight + flight.getPrice();
       pricePerPassenger =   pricePerPassenger  +(flight.getPrice()/flight.getPassgers());

     }
    return new Pair[] {new Pair<>("pricePerFlight", pricePerFlight), new Pair<>("pricePerPassenger", pricePerPassenger )};
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48669871

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档